1
#include <stdio.h>

int main(void) 
{
    long long x = test();
    printf("%lld\n", x);

    return 1;
}

long long test()
{   
    return 1111111111111111111;
} 

出力は734294471です。呼び出しを番号に置き換えるとtest()、出力は期待どおりになります。デバッガーを使用してxの値を確認しましたが、関数によって返される値に設定されていませんでした。何が問題になっていますか?

VisualStudio2010をVisualC++コンパイラで使用しています。

4

4 に答える 4

4

呼び出す前に宣言する必要があります。testそうしないと、Cはそれがを返すと想定しますint

于 2011-01-24T22:26:48.490 に答える
4

IIRC、C / C++のlonglong定数には、「LL」という接尾辞が付いています。

long long test() {
    return 1111111111111111111LL;
}

コンパイラは定数を32ビット長として扱います(2 ^ 32を法とする定数をとると、734294471になります)。

于 2011-01-24T22:28:45.763 に答える
1

戻り値にLLを追加してみてください。

long long test()
{   
    return 1111111111111111111LL;
} 
于 2011-01-24T22:29:28.117 に答える
0

リテラルに接尾辞LLを追加して、何が起こるかを確認します。おそらく、コンパイラはリテラルをintに変換します。コンパイラから警告が表示されていますか?

于 2011-01-24T22:30:05.540 に答える