Einen langen Wert zurückgeben
-
24-10-2019 - |
Frage
#include <stdio.h>
int main(void)
{
long long x = test();
printf("%lld\n", x);
return 1;
}
long long test()
{
return 1111111111111111111;
}
Der Ausgang beträgt 734294471. Wenn ich den Anruf ersetzt test()
Durch die Zahl ist die Ausgabe so wie ich es erwarte. Ich habe den Wert von X mit einem Debugger überprüft und der von der Funktion zurückgegebene zu Wert festgelegt. Was läuft schief?
Ich verwende Visual Studio 2010 mit dem Visual C ++ - Compiler.
Lösung
Sie müssen deklarieren test
Bevor Sie es nennen, nimmt C an, dass es zurückgibt int
.
Andere Tipps
IIRC, eine lange lange Konstante in C/C ++, wird von 'll' suffixiert.
long long test() {
return 1111111111111111111LL;
}
Ihr Compiler behandelt Ihre Konstante als 32-Bit-Länge (wenn Sie Ihr konstantes Modulo 2^32 nehmen, erhalten Sie 734294471.)
Versuchen Sie, LL zu Ihrem Rückgabewert hinzuzufügen:
long long test()
{
return 1111111111111111111LL;
}
Fügen Sie das Suffix LL zu Ihrem wörtlichen Fügen und sehen Sie, was passiert. Vermutlich verfolgt der Compiler das Literal zu einem int. Erhalten Sie Warnungen vom Compiler?