2012-05-07 7 views
6

Ho un semplice C-programma "./my_program"Cosa devo fare per ottenere l'intero valore di ritorno di c-program dalla riga di comando?

#include <stdio.h> 

int main (int argc , char **argv) { 


    unsigned int return_result = 0x474; 
    printf("return_result = %d = 0x%x \n",return_result,return_result); 
    return return_result; 

} 

Di conseguenza, questo programma stampa:

return_result = 1140 = 0x474 

voglio ottenere un valore di ritorno di c-programma all'interno script bash. Secondo questo link Anyway to get return value of c program from command line? Dovrei ottenere questa variabile da $?

Ma quando mi lancio come comandi conseguenza:

./my_program 
echo $? 

ottengo

116 

E 'ovviamente, che 116 = 0x74 (il byte più basso). Ma mi piacerebbe ottenere l'intero valore int non firmato. Cosa c'è che non va? Cosa devo fare per ottenere l'intero valore di ritorno di c-program dalla riga di comando? Questo non riguarda solo il tipo "unsigned int". Cosa devo fare nel caso in cui ho creato un tipo complicato, per esempio, - struttura.

ho provato questo:

return ((unsigned int) return_result_section_size); 

Non funziona.

risposta

6

I codici di uscita su Unix sono restricted to a single byte. Se vuoi produrre di più, puoi invece scriverlo su stdout o su un file.

Quindi perché il decreto standard C che main restituisce int e non char? Non ne ho idea ...

+0

Probabilmente perché è comune usare 'int' per i numeri che non hanno bisogno di qualcosa di più grande. Per lo stesso motivo è 'int argc' e non' unsigned int argc' – ThiefMaster

+0

Solo perché Unix limita i codici di uscita a un singolo byte non significa che lo standard dovrebbe forzare la stessa restrizione su altre piattaforme. – jamesdlin

+0

Ok, grazie per la risposta! –

0

Il valore restituito da main può essere stampato usando echo $? dopo aver terminato l'esecuzione. Il valore di ritorno da main viene generalmente utilizzato per indicare lo stato di esecuzione. Il valore massimo è limitato a 512. Se si tenta di restituire un valore superiore a 512, il valore 512% val verrà impostato in $ ?.

+0

Può essere, si dice "Il valore massimo è limitato a 255"? Ho appena provato a restituire 474. Il risultato non è 474. –

+0

Magia sarebbe necessario avere un massimo di 512. E la tua formula è sbagliata. Dovrebbe essere 'val% MAX'. –

+0

hmm ... Penso di aver sbagliato per il valore massimo. Il valore massimo è limitato a un byte - 255. –

Problemi correlati