または、言い換えると: 間違ったprintf
/ fprintf
10 進整数 ( %d
、%u
、 ) フォーマット文字列が原因で%ld
、%lld
プログラムがクラッシュしたり、未定義の動作が発生したりする可能性はありますか?
次のコード行の Cosinder:
#include <iostream>
#include <cstdio>
int main() {
std::cout << sizeof(int) << std::endl
<< sizeof(long) << std::endl;
long a = 10;
long b = 20;
std::printf("%d, %d\n", a, b);
return 0;
}
32 ビット アーキテクチャでの結果:
4
4
10, 20
64 ビット アーキテクチャでの結果:
4
8
10, 20
いずれにせよ、プログラムは期待される結果を出力します。long
値が範囲を超えると、プログラムは間違った数値を出力することはわかっていますが、int
これは見苦しいですが、プログラムの主な目的には影響しません。