Restituendo un valore molto lungo
-
24-10-2019 - |
Domanda
#include <stdio.h>
int main(void)
{
long long x = test();
printf("%lld\n", x);
return 1;
}
long long test()
{
return 1111111111111111111;
}
L'uscita è 734.294.471. Se si sostituisce la chiamata a test()
da un numero, l'uscita è come mi aspetto. Ho controllato il valore di x utilizzando un debugger e non è stato impostato il valore restituito a dalla funzione. Cosa c'è di sbagliato?
Sto usando Visual Studio 2010 con il compilatore C ++ visivo.
Soluzione
È necessario dichiarare test
prima di chiamare, altrimenti C assume restituisce int
.
Altri suggerimenti
IIRC, un lungo tempo costante in C / C ++ è suffisso 'LL'.
long long test() {
return 1111111111111111111LL;
}
Il compilatore sta trattando il vostro costante come 32 bit lungo (se prendete il vostro costante modulo 2 ^ 32, si ottiene 734.294.471.)
Prova ad aggiungere LL al valore di ritorno:
long long test()
{
return 1111111111111111111LL;
}
Aggiungere il LL suffisso al vostro letterale e vedere cosa succede. Presumibilmente il compilatore conberts letterale a un int. State ottenendo eventuali avvisi del compilatore?