¿Hay algún beneficio al NO usar prototipos de función en C?

Estoy trabajando con un código C que no contiene prototipos de funciones para una determinada clase de funciones. ¿Hay alguna ventaja al no utilizar prototipos de funciones? Las funciones nunca se llaman y no tienen parámetros. El código cambia mucho, ¿entonces tal vez solo sea una línea menos para editar?

Los prototipos de funciones son para funciones externas. Mi regla es que cada función no estática obtiene un prototipo, excepto main (). Uso la opción GCC ‘-Wmissing-prototypes’. Por lo general, lo que capta es cuando olvido declarar una función estática.

Además, declara las funciones en C de esta manera:

void function(void); 

Y no de esta manera:

 void function(); 

Debido a que la segunda forma significa que la función toma un número no especificado de parámetros, lo cual no es lo que desea (es por compatibilidad con C AN-ANSI).

No

Y no sé si es legal en estricto sentido.

“El código cambia mucho” cuando se aplica a prototipos funcionales también es un mal olor de código. Si la interfaz (firma de función) cambia mucho, es probable que las responsabilidades de una función no sean muy claras. Primero trabaje para descubrir cómo dividir el problema en subresponsabilidades y solo después de eso comience a escribir el código.

“¿Entonces tal vez es solo una línea menos para editar?”

Ese es el único “beneficio” posible en este caso, la simple pereza.

Menos código para cambiar es la única ‘ventaja’ que se me ocurre. Típicamente esto es solo ‘perezoso’

En cualquier caso, las desventajas son más significativas: debes tener las funciones todas en un archivo fuente; el orden de las funciones en el archivo de origen ahora importa, etc. Además, otras personas se confundirán al buscar / para el archivo de encabezado … la mejor práctica es .c y .h.

El único beneficio que veo es que no tiene que actualizar los prototipos de funciones cada vez que cambie las funciones.

El código cambia mucho, ¿entonces tal vez solo sea una línea menos para editar?

Supongo que esa es la razón. No puedo pensar en ninguna otra razón, ni la velocidad de comstackción cambia (prácticamente), ni el tiempo de ejecución, simplemente el momento de actualizar el código.

La única ventaja que se me ocurre es que le ahorra tener que copiar y pegar la primera línea de la función en la sección de prototipos de su archivo .c o .h.

Para las funciones a las que se hace referencia en otros archivos, no tiene más remedio que tener un prototipo.

Para funciones con scope de archivo (es decir, funciones estáticas), es útil tener todos los prototipos en un bloque en la parte superior del archivo. De esa manera, cualquier función estática puede ser llamada por otra desde cualquier lugar en ese archivo. Sin prototipos, la función A () solo puede llamar a la función B () si B () se declara sobre ella en el código.

Además, algunos comstackdores harán suposiciones inseguras sobre los parámetros si no hay un prototipo en el scope.

Además, si escribe un código que debe cumplir con MISRA-C, es un requisito que todas las funciones tengan un prototipo en su scope.

También abogo por garantizar que el prototipo contenga los nombres de los parámetros, no solo sus tipos (que es legal), ya que aclara el propósito de los parámetros con solo mirar el prototipo.

Es menos tipeo, así que tal vez eso reduce su riesgo de RSI.