代码,C89:< /P> 6代码>代码> > #include <stdio.h> int main() { int a = 12//**/2; ; printf("%d\n", a); return 0; } #包括 int main() { int a=12/**/2; ; printf(“%d\n”,a); 返回0; },c++,c,compilation,C++,C,Compilation" /> 代码,C89:< /P> 6代码>代码> > #include <stdio.h> int main() { int a = 12//**/2; ; printf("%d\n", a); return 0; } #包括 int main() { int a=12/**/2; ; printf(“%d\n”,a); 返回0; },c++,c,compilation,C++,C,Compilation" />

不同编译器的不同输出-C和C++; 你能想到“程序”,它给C和C++编译器提供不同的输出(但在相同的语言下给出一致的输出)?< /P> 将不编译在C++中,将编译在C. int main() { return sizeof 'a'; } 一个常见的例子是 siZeof(A')< /C>,通常是4,但在C++中总是1,因为字符常量(如代码> > a′/Cuth>在C中有类型 int ,但是C++中的类型 char < /> >: #include <stdio.h> int main(void) { printf("%d\n", sizeof('A')); } #包括 内部主(空) { printf(“%d\n”,sizeof('A')); } 程序在C++或C99中生成 12代码>代码,C89:< /P> 6代码>代码> > #include <stdio.h> int main() { int a = 12//**/2; ; printf("%d\n", a); return 0; } #包括 int main() { int a=12/**/2; ; printf(“%d\n”,a); 返回0; }

不同编译器的不同输出-C和C++; 你能想到“程序”,它给C和C++编译器提供不同的输出(但在相同的语言下给出一致的输出)?< /P> 将不编译在C++中,将编译在C. int main() { return sizeof 'a'; } 一个常见的例子是 siZeof(A')< /C>,通常是4,但在C++中总是1,因为字符常量(如代码> > a′/Cuth>在C中有类型 int ,但是C++中的类型 char < /> >: #include <stdio.h> int main(void) { printf("%d\n", sizeof('A')); } #包括 内部主(空) { printf(“%d\n”,sizeof('A')); } 程序在C++或C99中生成 12代码>代码,C89:< /P> 6代码>代码> > #include <stdio.h> int main() { int a = 12//**/2; ; printf("%d\n", a); return 0; } #包括 int main() { int a=12/**/2; ; printf(“%d\n”,a); 返回0; },c++,c,compilation,C++,C,Compilation,来自,经过修改以产生每种语言的一致输出: extern int T; int size(void) { struct T { int i; int j; }; return sizeof(T) == sizeof(int); /* C: return 1 * C++: return 0 */ } #包括 内部主(空) { #ifdef_uucplusplus puts(“C++”); #否则 看跌期权(“C”); #恩迪夫 返回0; }

来自,经过修改以产生每种语言的一致输出:

extern int T;

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

    return sizeof(T) == sizeof(int);
    /* C:   return 1
    *  C++: return 0
    */
}
#包括
内部主(空)
{
#ifdef_uucplusplus
puts(“C++”);
#否则
看跌期权(“C”);
#恩迪夫
返回0;
}

Wow!!许多想法都集中在一个地方。。。很好..问题是关于程序输出,而不是编译器输出。虽然准确,但我更多地把它看作是一种黑客行为:)虽然很好。但这并不能真正回答问题,不是吗?它在C和C++中产生相同的输出(毕竟是当前C标准的C99)。@是的,是一个更精确的匹配问题。这是一个愚蠢的面试问题操作员。代码> sieOS/<代码>返回<代码> siZeIt < /COD>不<代码> int >代码>。所以您的代码包含错误。和
sizeof(int)
可以是1。但不是完全可移植的<如果
sizeof(int)=1
(只有当
CHAR\u BIT>=16
时才可能),则“a”的code>sizeof在C中可能是1。预处理器是语言的一部分?@harper:Yes。这是C99标准的第6.10节,C++标准的第16节。缺少<代码>包含了< /代码>。代码>%d“需要
int
,而不是
size\u t
。一致性实现可以有
sizeof(struct X)==1
(例如,
CHAR\u BIT==64
),通过提供
struct X
两个
CHAR
成员而不是
double
来修复。这会根据语言返回不同的状态,但不会产生任何输出。
#include <stdio.h>

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

    printf("%d\n", a);
    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
    */
}
#include <stdio.h>
int main(void)
{
#ifdef __cplusplus
    puts("C++");
#else
    puts("C");
#endif
    return 0;
}