He oído que es una buena práctica escribir funciones que no reciben nada como un parámetro como este:
int func(void);
Pero escuché que la forma correcta de expresar eso es así:
int func();
¿Cuál es la diferencia entre estas dos declaraciones de funciones en C y C ++?
c++
programming-practices
c
Oso pardo
fuente
fuente
Respuestas:
C y C ++ son diferentes a este respecto.
C 2011 estándar en línea
En resumen, una lista de parámetros vacía en una declaración de función indica que la función toma un número no especificado de parámetros, mientras que una lista de parámetros vacía en una definición de función indica que la función no toma parámetros.
En lo que respecta a C, nunca debe usar una lista de identificadores vacía en una declaración o definición de función. Si una función no está destinada a tomar ningún parámetro, especifíquelo utilizando
void
en la lista de parámetros.Estándar en línea de C ++
En el caso de C ++, una lista de parámetros vacía en una declaración o una definición indica que la función no toma argumentos, y es equivalente a usar una lista de parámetros de
void
.fuente
En C, una función con una lista de parámetros vacía
()
puede tomar cualquier cosa por sus argumentos. Literalmente cualquier cosa. Esto generalmente se usa para implementar una función que puede tomar un número variable de argumentos , aunque en estos días se considera preferible usar la sintaxis de puntos suspensivos más explícitos(...)
para estas funciones.En C, una función con la lista de parámetros
(void)
explícitamente no toma nada para sus argumentos. Eso significa que el compilador puede decirle que cometió un error si intenta pasar algo.En C ++, estas declaraciones de funciones son equivalentes. Una lista de parámetros en blanco significa "sin parámetros" igual que lo
void
hace.fuente
()
para las variables. ¿Tiene un ejemplo de un programa que utiliza esta convención?...
sintaxis y debe tener al menos un parámetro con nombre. La definición de dicha función()
provoca un comportamiento indefinido, y el cuerpo de la función no puede utilizar las macros definidas<stdarg.h>
para leer los valores de los parámetros. Este ha sido el caso desde el estándar 1989/1990....
sintaxis para evitar comportamientos indefinidos.