Il C standard (5.1.2.2.1 all'avvio del programma) dice:di Array indice e argc signedness
La funzione chiamata all'avvio del programma prende il nome principale. [...]
Essa è definita con un tipo ritorno di int e senza parametri:
int main(void) { /* ... */ }
o con due parametri [...]:
int main(int argc, char *argv[]) { /* ... */ }
E poi dice:
Il valore di argc deve essere non negativo.
- Perché non dovrebbero
argc
essere definito come ununsigned int
,argc
suppone che significa 'numero di argomenti'? - È necessario utilizzare
argc
come indice perargv
?
Così ho iniziato a chiedermi se lo standard C dice qualcosa sul tipo di indice dell'array. È firmato?
6.5.2.1 Array indicizzazione di:
Una delle espressioni avranno tipo '' puntatore al tipo di oggetto '', l'altra espressione ha intero tipo, e il risultato ha tipo '' tipo ''.
Non dice nulla sulla sua firma (o non l'ho trovato). È piuttosto comune vedere codici che utilizzano indici di array negativi (array[-1]
) ma non è un comportamento non definito?
- Gli indici dell'array devono essere senza segno?
Basta dichiararlo non firmato, non accadrà nulla di male. In realtà è chiamato con 3 argomenti, è possibile aggiungere char * env []. –
@nobugz, sì, so che non accadrà nulla di brutto, mi stavo chiedendo perché 'argc' è firmato secondo lo standard. 'char * envp []' dipende dalla piattaforma e 'char * apple []' è su MacOSX/Darwin. –
Questa domanda è un duplicato di http: // StackOverflow.it/questions/1773897/why-is-argc-an-int-piuttosto-than-an-unsigned-int – caf