#include<stdio.h>
#include<conio.h>
void main()
{
int a=10,b=11;
clrscr();
printf("%d");
getch();
}
Output=11 printf 関数で変数名を指定していないのに、出力が 11 になる方法。
#include<stdio.h>
#include<conio.h>
void main()
{
int a=10,b=11;
clrscr();
printf("%d");
getch();
}
Output=11 printf 関数で変数名を指定していないのに、出力が 11 になる方法。
11 は変数のためにスタックb
上printf()
にあり、変数が渡される場所であるため、関数はスタック上の値をスタック上で探しています。
を追加するc=47
と、おそらく 47 になります。ただし、これは未定義の動作です。
これは「未定義の動作」と呼ばれ、プログラムはほぼ何でもできることを意味します。
この場合、実際に起こっていることは、変数と関数パラメーターの両方がスタックに置かれることです。printf が期待するパラメーターを渡していないため、変数であるスタックから何か他のものを引き出すことになりますb
。
ただし、これは未定義の動作であるため、別のコンパイラ、別の CPU、またはより高い最適化レベルなどの別のコンパイル オプションを使用すると、非常に異なる結果が得られる可能性があります。