2

この出力の理由を理解できなかったコード行が数行あります..

int main()
{
int a=5;
float b=10.5,c=11.0;
printf("%d",b);
printf("\n%d",c);
printf("\n%f",a);
return 0; 
}

Visual C++ の O/p :- 0 ,0 ,0.000000

gcc コンパイラ:- 0,0, 11.000000

4

2 に答える 2

10

のような可変引数関数を呼び出すとprintffloats は に昇格しdoubleます。ints はそのまま渡されます。printfしたがって、あなたが書くとき、そしてdoubleあなたが書くときを期待しています。%fint%d

したがってdouble、を与えずに を与えることは、未定義の動作です。同様に、関数が an を期待するときにa を渡すことも未定義です。intdoubleint

いつものように、未定義の動作は「何かが起こる可能性がある」ことを意味します。決して、未定義の動作に頼らないでください。

于 2013-02-21T07:44:31.577 に答える
4

未定義または未指定の動作で遊んでいます。それらのどれであるかはわかりません。gcc 4.7.2 を使用する Debian では、出力に -780714744、4195886、11.000000 が表示されます。

于 2013-02-21T07:17:44.250 に答える