Słyszałem, że dobrą praktyką jest pisanie funkcji, które nie otrzymują niczego jako takiego parametru:
int func(void);
Ale słyszę, że właściwy sposób wyrażenia tego jest następujący:
int func();
Jaka jest różnica między tymi dwiema deklaracjami funkcji zarówno w C, jak i C ++?
c++
programming-practices
c
Siwy
źródło
źródło
Odpowiedzi:
C i C ++ różnią się pod tym względem.
C 2011 Online Standard
Krótko mówiąc, pusta lista parametrów w deklaracji funkcji wskazuje, że funkcja przyjmuje nieokreśloną liczbę parametrów, a pusta lista parametrów w definicji funkcji wskazuje, że funkcja nie przyjmuje parametrów.
Jeśli chodzi o C, nigdy nie należy używać pustej listy identyfikatorów w deklaracji lub definicji funkcji. Jeśli funkcja nie ma przyjmować żadnych parametrów, określ ją, używając jej
void
na liście parametrów.Internetowy standard C ++
W przypadku C ++ pusta lista parametrów w deklaracji lub definicji wskazuje, że funkcja nie przyjmuje żadnych argumentów i jest równoważna z użyciem listy parametrów
void
.źródło
W C funkcja z pustą listą parametrów
()
może przyjąć dowolne argumenty. Dosłownie wszystko. Jest to zwykle używane do implementacji funkcji, która może przyjmować zmienną liczbę argumentów , choć w dzisiejszych czasach uważa się za wskazane stosowanie bardziej wyraźnej składni elipsy(...)
dla tych funkcji.W C funkcja z listą parametrów
(void)
jawnie nie przyjmuje żadnych argumentów. Oznacza to, że kompilator może powiedzieć ci, że popełniłeś błąd, jeśli próbujesz coś przekazać.W C ++ te deklaracje funkcji są równoważne. Pusta lista parametrów oznacza „brak parametrów” tak samo jak
void
.źródło
()
dla funkcji variadic. Czy masz przykład programu korzystającego z tej konwencji?...
składnią i musi mieć co najmniej jeden nazwany parametr. Zdefiniowanie takiej funkcji()
powoduje niezdefiniowane zachowanie - a treść funkcji nie może użyć makr zdefiniowanych w<stdarg.h>
celu odczytania wartości parametru. Tak jest od standardu 1989/1990....
składni, aby uniknąć niezdefiniowanego zachowania.