考虑 C 中的以下代码:
void main()
{
int a=0;
for(printf("\nA"); a; printf("\nB"));
printf("\nC");
printf("\nD");
}
当我使用 Turb C++ 3.0 版和 gcc-4.3.4 编译它时,我得到以下两种情况的输出:
A
C
D
但是,如果我编译以下代码:
void main()
{
for(printf("\nA"); 0; printf("\nB"));
printf("\nC");
printf("\nD");
}
gcc-4.3.4 的输出与前一种情况相同,但 turbo c++ 3.0 产生以下输出:
A
B
C
D
首先,我不知道这里发生了什么!另外,为什么 gcc 编译器的输出对于两个代码是相同的,但是在 turboc++ 3.0 编译器的情况下,输出是不同的?有人可以阐明一下吗?
编辑 :
其实有人在IT公司的面试中被问到这个问题,当他没有给出答案时,面试官给出了这个解释。但我觉得这很愚蠢。您如何要求某人使用“错误”,就好像它是该语言提供的“设施”一样?为了将其称为“设施”和“技术”,无论我们在第二个表达式中将 0 作为文字传递还是将值为 0 的变量传递,结果应该是相同的。
我是否认为面试官非常愚蠢地提出这样的问题并且这表明他的无能是错误的?