2011-03-29 16 views
12

क्या आप 'एक प्रोग्राम' के बारे में सोच सकते हैं जो 'सी और सी ++ कंपाइलर्स के लिए अलग-अलग आउटपुट' देता है (फिर भी एक ही भाषा के तहत लगातार आउटपुट देता है)?विभिन्न कंपाइलर के लिए अलग-अलग आउटपुट - सी और सी ++

+9

यह वह जगह है एक बेवकूफ साक्षात्कार प्रश्न –

उत्तर

19

इस कार्यक्रम सी में 12 या पैदा करता ++ C99, और 6 C89 में:

#include <stdio.h> 

int main() 
{ 
    int a = 12//**/2; 
    ; 

    printf("%d\n", a); 
    return 0; 
} 
+0

हालांकि सटीक, मैं इसे एक हैक के रूप में और अधिक देखता हूं :) हालांकि अच्छा है। –

+1

यह वास्तव में सवाल का जवाब नहीं देता है, हालांकि, क्या यह करता है? यह सी और सी ++ में एक ही आउटपुट उत्पन्न करता है (सी 99, आखिरकार, वर्तमान सी मानक) है। –

+0

@ किथ थॉम्पसन: हां, [ईसीआईके का उत्तर] (http://stackoverflow.com/questions/5467576/different-output-for-different-compiler-c-and-c/5469636#5469636) के लिए एक और सटीक मिलान है सवाल। – caf

3
int class; 

C++ में संकलन नहीं होगा और सी

+0

वाह !! कई विचार एक ही स्थान पर ... अच्छा .. – Aditya369

+1

प्रश्न प्रोग्राम आउटपुट के बारे में था, संकलक आउटपुट नहीं। –

9
int main() { return sizeof 'a'; } 
+1

पूरी तरह संक्षेप में! – GManNickG

+2

लेकिन पूरी तरह से पोर्टेबल नहीं है। 'sizeof 'a'' सी में 1 हो सकता है यदि आकार (int) == 1' (जो केवल तभी संभव है जब' CHAR_BIT> = 16') हो। –

20

Incompatibilities between ISO C and ISO C++

एक सामान्य उदाहरण sizeof('A'), जो आमतौर पर सी में 4 लेकिन हमेशा 1 सी में है ++ है में संकलन होगा, क्योंकि चरित्र 'A' जैसे स्थिरांक में int टाइप सी है लेकिन सी ++ में char टाइप करें:

#include <stdio.h> 

int main(void) 
{ 
    printf("%d\n", sizeof('A')); 
} 
+1

ऑपरेटर 'sizeof' रिटर्न' size_t' 'int' नहीं। तो आपके कोड में त्रुटि है। http://stackoverflow.com/questions/940087/whats-the-correct-way-to-use-printf-to-print-a-size-t – UmmaGumma

+0

और 'sizeof (int)' हो सकता है 1. –

5
typedef char X; 
int main() { 
    struct X { double foo; } 
    printf("%d\n", sizeof(X)); 
    return 0; 
} 
+1

गुम ' # शामिल करें '। '"% d "' को 'int' की आवश्यकता है, न कि 'size_t'। एक अनुरूप कार्यान्वयन में 'आकार (संरचना एक्स) == 1' (उदाहरण के लिए,' CHAR_BIT ==64') हो सकता है, 'डबल एक्स' के बजाय 'स्ट्रक्चर एक्स' दो 'char' सदस्यों को देकर फिक्स करने योग्य। –

4

wikipedia से, प्रत्येक भाषा में लगातार उत्पादन का उत्पादन करने के लिए बदल:

extern int T; 

int size(void) 
{ 
    struct T { int i; int j; }; 

    return sizeof(T) == sizeof(int); 
    /* C: return 1 
    * C++: return 0 
    */ 
} 
+0

यह भाषा के आधार पर एक अलग स्थिति देता है, लेकिन यह किसी भी * आउटपुट * का उत्पादन नहीं करता है। –

2
#include <stdio.h> 
int main(void) 
{ 
#ifdef __cplusplus 
    puts("C++"); 
#else 
    puts("C"); 
#endif 
    return 0; 
} 
+0

प्रीप्रोसेसर भाषा का हिस्सा है? – harper

+0

@harper: हाँ। यह सी 99 मानक की धारा 6.10 है, सी ++ मानक की धारा 16। –

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