El C standard (5.1.2.2.1 Programa de inicio) dice:de índice de matriz y argc de signo
La función llamada al inicio del programa se denomina principal. [...]
os será de fi nido con un tipo de retorno de int y sin parámetros:
int main(void) { /* ... */ }
o con dos parámetros [...]:
int main(int argc, char *argv[]) { /* ... */ }
Y más adelante dice:
El valor de argc no será negativo.
- ¿Por qué no debería
argc
ser definido como ununsigned int
,argc
supuestamente significa 'número de argumentos'? - ¿Debería usarse
argc
como índice paraargv
?
Así que comencé a preguntarme si el estándar C dice algo sobre el tipo de índice de la matriz. ¿Está firmado?
6.5.2.1 Matriz subscripting:
Una de las expresiones tendrán tipo '' puntero a tipo de objeto '', el otro expresión tendrá número entero tipo, y el resultado tiene el tipo '' tipo ''.
No dice nada sobre su firma (o no lo encontré). Es bastante común ver códigos que usan índices de matriz negativos (array[-1]
), pero ¿no es un comportamiento indefinido?
- ¿Deben los índices de la matriz ser unsigned?
Simplemente declare que no tiene firma, nada malo sucederá. En realidad se llama con 3 argumentos, puede agregar char * env []. –
@nobugz, sí, sé que no pasará nada malo, me preguntaba por qué 'argc' está firmado de acuerdo con el estándar. 'char * envp []' depende de la plataforma y 'char * apple []' está en MacOSX/Darwin. –
Esta pregunta es un duplicado de http: // stackoverflow.com/questions/1773897/why-is-argc-an-int-rather-an-unsigned-int – caf