2016-02-17 3 views
7

कोड:क्या कोई इन सी कोड को समझा सकता है?

enum {a, b}; 

int different(void) 
{ 
    if (sizeof (enum {b, a}) != sizeof (int)) 
     return a; // a == 1 
    return b; // b == 0 in C89, b == 1 in C99 
} 

कैसे a==1 और b==0c89 में और c99 में b==1?

मुझे पता है कि कैसे वापसी a में a का मूल्य c89 और c99 में b परिवर्तन की 1 और वापसी मान है करना चाहते हैं?

+0

ठीक है, आप अधिक विवरण जोड़ सकते हैं देता है? अभी तक मैं आपके प्रश्न को ठीक से समझ नहीं पा रहा हूं। –

+1

आईआईआरसी, तो अन्य सी करें। –

+0

@ आशीषहुजा आकार (enum {b, a}) 4 है और आकार (int) भी 4 है जिसका अर्थ है कि अगर (4! = 4) तो वापस लौटें ;, 1 का मूल्य कैसे है? – user123456987

उत्तर

9

सी 8 9 और सी 99 व्यवहार के बीच का अंतर enum परिभाषा दायरे में है। जीसीसी में, सी 8 9 के लिए आंतरिक परिभाषा return b के लिए प्रभावी है, जबकि सी 99 में बाहरी परिभाषा return b के लिए प्रभावी है।

आप निम्न उदाहरण में अधिक स्पष्ट रूप से देख सकते हैं:

#include <stdio.h> 

enum {a=5, b=6}; 

int different(void) 
{ 
    if (sizeof(enum {b=7, a=8}) != sizeof(int)) 
     return a; 
    return b; 
} 

int main() 
{ 
    printf("%d\n", different()); 
} 

जीसीसी में, C89 मोड 7 देता है और C99 मोड 6.

संबंधित मुद्दे