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.

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top