不同编译器的不同输出 – 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; }