不同编译器的不同输出 – C和C ++

你能想到“一个程序”,它为C和C ++编译器提供了“不同的输出”(但是在同一种语言下提供了一致的输出)吗?

该程序在C ++或C99中产生12 ,在C89中产生6

 #include  int main() { int a = 12//**/2; ; printf("%d\n", a); return 0; } 

ISO C和ISO C ++之间的不兼容性

一个常见的例子是sizeof('A') ,它在C中通常为4,但在C ++中总是1,因为像'A'这样的字符常量在C中的类型为int ,但在C ++中的类型为char

 #include  int main(void) { printf("%d\n", sizeof('A')); } 
 int main() { return sizeof 'a'; } 
 typedef char X; int main() { struct X { double foo; } printf("%d\n", sizeof(X)); return 0; } 

从维基百科中 ,改变以生成每种语言的一致输出:

 extern int T; int size(void) { struct T { int i; int j; }; return sizeof(T) == sizeof(int); /* C: return 1 * C++: return 0 */ } 
 int class; 

不会在C ++中编译并将在C中编译。

 #include  int main(void) { #ifdef __cplusplus puts("C++"); #else puts("C"); #endif return 0; }