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

时间:2011-03-29 03:24:59

标签: c++ c compilation

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

7 个答案:

答案 0 :(得分:20)

Incompatibilities between ISO C and ISO C++

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

char

答案 1 :(得分:19)

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

#include <stdio.h>

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

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

答案 2 :(得分:9)

int main() { return sizeof 'a'; }

答案 3 :(得分:5)

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

答案 4 :(得分: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
    */
}

答案 5 :(得分:3)

int class;

不能用C ++编译,而是用C语言编译。

答案 6 :(得分:2)

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