Considere este programa en C:
int main()
{
puts("Hello world!");
return 0;
}
Esto compila y funciona bien y, según tengo entendido, es C89 legal. Sin embargo, no estoy 100% seguro de eso. Compilando en modo C99 con sonido metálico me informa que implicit declaration of function 'puts' is invalid in C99
(lo que me hace pensar que el estándar C debe haber cambiado en C99 para hacer que la declaración de función implícita sea ilegal, que es lo que estoy tratando de confirmar).
¿Es legal la declaración de función implícita en C89? (incluso si es una mala idea hacerlo (a menos que esté en un desafío de código C ofuscado))
¿Es legal la declaración de función implícita en C89?
Si. Desde sección 3.3.2.2:
Si la expresión que precede a la lista de argumentos entre paréntesis en una llamada de función consta únicamente de un identificador, y si no hay una declaración visible para este identificador, el identificador se declara implícitamente exactamente como si, en el bloque más interno que contiene la llamada de función, la declaración
extern int identifier();
apareció
La declaración implícita de función es legal en C89, pero se elimina en C99. Esto se puede confirmar en el estándar C11 (ISO/IEC 9899:201x).
en el C11 Hacia adelante sección, enumera todos los cambios principales en la tercera edición (es decir, C11) y la segunda edición (es decir, C99), uno de los cuales es:
Los principales cambios en la segunda edición incluyeron:
…
— eliminar la declaración de función implícita
También en Justificación de los lenguajes de programación estándar internacionales C §6.5.2.2 Llamadas de función
Una nueva característica de C99: la regla para la declaración implícita de funciones se eliminó en C99. El efecto es garantizar la producción de un diagnóstico que detectará una categoría adicional de errores de programación. Después de emitir el diagnóstico, una implementación puede optar por asumir una declaración implícita y continuar con la traducción para admitir programas existentes que explotaron esta función.
Esta respuesta a una pregunta similar podría ayudarte un poco.
– Frxstrem
7 de julio de 2013 a las 1:37