Ouvi dizer que é uma boa prática escrever funções que não recebem nada como um parâmetro como este:
int func(void);
Mas ouvi dizer que a maneira correta de expressar isso é assim:
int func();
Qual é a diferença entre essas duas declarações de função em C e C ++?
c++
programming-practices
c
Grizzly
fonte
fonte
Respostas:
C e C ++ são diferentes nesse aspecto.
C 2011 Padrão Online
Em resumo, uma lista de parâmetros vazia em uma declaração de função indica que a função aceita um número não especificado de parâmetros, enquanto uma lista de parâmetros vazia em uma definição de função indica que a função não aceita parâmetros.
No que diz respeito a C, você nunca deve usar uma lista de identificadores vazia em uma declaração ou definição de função . Se uma função não tiver nenhum parâmetro, especifique-o usando
void
na lista de parâmetros.Padrão C ++ on-line
No caso de C ++, uma lista de parâmetros vazia em uma declaração ou definição indica que a função não aceita argumentos e é equivalente a usar uma lista de parâmetros de
void
.fonte
Em C, uma função com uma lista de parâmetros vazia
()
pode levar qualquer coisa para seus argumentos. Literalmente qualquer coisa. Isso geralmente é usado para implementar uma função que pode levar um número variável de argumentos , embora atualmente seja considerado preferível usar a sintaxe de reticências mais explícita(...)
para essas funções.Em C, uma função com a lista de parâmetros
(void)
não aceita explicitamente nada para seus argumentos. Isso significa que o compilador pode realmente dizer que você cometeu um erro se tentar passar alguma coisa.No C ++, essas declarações de função são equivalentes. Uma lista de parâmetros em branco significa "sem parâmetros" da mesma forma que
void
faz.fonte
()
para aquelas de variáveis variadas. Você tem um exemplo de um programa que usa esta convenção?...
sintaxe e deve ter pelo menos um parâmetro nomeado. Definir essa função com()
causa um comportamento indefinido - e não há como o corpo da função usar as macros definidas<stdarg.h>
para ler os valores dos parâmetros. Este tem sido o caso desde o padrão 1989/1990....
sintaxe para evitar comportamentos indefinidos.