en c: func(void) vs func() [duplicate]

2 minutos de lectura

avatar de usuario
noamtm

Cuando una función C no acepta ningún argumento, ¿tiene que ser declarada/definida con un parámetro “vacío” por las reglas del lenguaje? PC-Lint parece tener problemas cuando no hay nada en la lista de argumentos, y me preguntaba si es algo en la sintaxis del lenguaje que no conozco.

Editar: Acabo de encontrar una pregunta duplicada (¿duplicada de nuevo? vino primero), C void arguments, que tiene más respuestas y explicaciones.

void significa que la función no toma ningún parámetro. Por ejemplo,

int init (void)
{
    return 1;
}

Esto no es lo mismo que definir

int init ()
{
    return 1;
}

porque en el segundo caso, el compilador no verificará si la función realmente se llama sin ningún argumento; en su lugar, se aceptará una llamada de función con un número arbitrario de argumentos sin ninguna advertencia (Esto se implementa solo para la compatibilidad con la sintaxis de definición de función de estilo antiguo, pre-ANSI).

avatar de usuario
timo geusch

IIRC func(void) en C declarará una función que no toma parámetros mientras que func() declara una función que tomará cualquier cantidad de parámetros. Creo que este último es un artefacto que proviene de pre-ANSI C.

De acuerdo a Wikipedia aquí, la declaración func() básicamente declara la función “sin información sobre los parámetros”.

  • ¿No es una función que toma cualquier número de parámetros definida como func(…) ?

    – noamtm

    22 de julio de 2009 a las 8:44

  • Usted cree que es correcto, en K&R C las listas de parámetros se definieron diferentes (y mal). Pero en C++ f() es lo mismo que f(void)

    –Henk Holterman

    22 de julio de 2009 a las 8:49

  • @noamtm – una función de la forma func(a, b, …); declara una función C que toma una lista de argumentos variables, por lo que en cierto sentido también tomaría cualquier número de parámetros.

    – Timo Geusch

    22 de julio de 2009 a las 8:55

¿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