¿Es legal la declaración de función implícita en C89?

2 minutos de lectura

¿Es legal la declaracion de funcion implicita en C89
Tallos de maiz

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))

  • Esta respuesta a una pregunta similar podría ayudarte un poco.

    – Frxstrem

    7 de julio de 2013 a las 1:37

¿Es legal la declaracion de funcion implicita en C89
Oliver Charlesworth

¿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ó

  • En este caso particular, tiene un comportamiento bien definido solo porque puts pasa a devolver un int resultados para un no-int función, el comportamiento sería indefinido. Y, por supuesto, es mejor simplemente agregar el #include <stdio.h> de todos modos.

    –Keith Thompson

    7 de julio de 2013 a las 1:51

  • Además, usando printf() habría invocado un comportamiento indefinido porque las funciones de lista de argumentos variables como printf() debe ser debidamente declarada, incluso en C89. Invocarlos sin un prototipo en el alcance no es una buena idea.

    –Jonathan Leffler

    7 de julio de 2013 a las 2:12

¿Es legal la declaracion de funcion implicita en C89
yuhao

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.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad