¿Por qué los compiladores ANSI C no señalan el uso de un argumento de cadena literal en una llamada de función en la que el parámetro correspondiente no tiene un calificador const? Por ejemplo, el siguiente código podría generar una excepción al intentar escribir en la memoria de solo lectura.Literales de cadena frente a const char * en C
void somefunc(char buffer[10]);
void somefunc(char buffer[10]) {
int i;
for (i = 0; i < 10; i++)
buffer[i] = 0;
}
int main(int argc, char **argv) {
somefunc("Literal");
return 0;
}
Esta situación se pudo identificar en tiempo de compilación, pero VS2010 y gcc no parecen hacerlo. Llamar a somefunc con un argumento const char * generará una advertencia de compilación.
Buena pregunta: gcc tampoco detecta esto, incluso con '-Wextra'. –
¿Cuál es el punto de declarar una función y luego definirla en la siguiente línea? :) – GManNickG
Hans: He modificado la pregunta para especificar ANSI C. De todos modos, no estaba sugiriendo que se emitiera un error de compilación. Una advertencia de nivel 3 o 4 simplemente resaltaría una situación potencialmente peligrosa. – Robin