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 の変数を渡しても結果は同じだったはずです。
インタビュアーがそのような質問をするのは非常に愚かであり、それは彼の無能さを示していると結論付けるのは間違っていますか?