質問
#include <stdio.h>
int main(void)
{
long long x = test();
printf("%lld\n", x);
return 1;
}
long long test()
{
return 1111111111111111111;
}
出力は734294471です。通話を交換した場合 test()
数によって、出力は私が期待する通りです。デバッガーを使用してXの値を確認しましたが、関数によって返される値は設定されていませんでした。何が問題になっていますか?
Visual C ++コンパイラでVisual Studio 2010を使用しています。
解決
宣言する必要があります test
あなたがそれを呼ぶ前に、そうでなければcはそれが戻ると仮定します int
.
他のヒント
IIRC、C/C ++の長い定数は「LL」によって接尾辞が付けられています。
long long test() {
return 1111111111111111111LL;
}
コンパイラは、定数を32ビットの長さとして扱っています(定数測定値2^32を取得した場合、734294471を取得します。)
返品値にLLを追加してみてください:
long long test()
{
return 1111111111111111111LL;
}
リテラルに接尾辞LLを追加して、何が起こるかを確認します。おそらく、コンパイラはintの文字通りです。コンパイラから警告がありますか?
所属していません StackOverflow