0

重複の可能性:
変数名を指定せずに %d を出力するときの printf の動作

たとえば、printf("%d %d"); を使用するとどうなりますか。? スタックから最後の 8 バイトをポップして出力するだけでしょうか?

4

4 に答える 4

1

GCCでは-警告が表示されます(これはを使用して行われます__attribute__ ((__warn_unused_result__)))。

x86では、呼び出し元がデータをスタックにプッシュし、関数が返された後にポップするため、スタックエラーは発生しません。これは、関数がスタックからデータをポップする(ret 10たとえば、ASMで使用する)pascalとは異なり、C呼び出し規約と呼ばれます。

必要なデータの値はランダムになります。

于 2012-07-03T06:06:05.233 に答える
0

技術的には、のフォーマット指定子printf()の数が引数の数よりも多い場合の未定義の動作。

ただし、以下は問題ありません

printf("%d",x,y); // y is evaluated but not printed.

于 2012-07-03T06:04:11.007 に答える
0

ガベージ値を出力しますが、「データ引数よりも多くの % 変換」という警告があります。

于 2012-07-03T06:18:03.333 に答える
0

その場合、garbage dataコンパイラとそのコンパイルオプションに依存するものを取得します....

于 2012-07-03T06:07:59.350 に答える