Я слышал, что хорошей практикой является написание функций, которые не получают ничего в качестве параметра, подобного этому:
int func(void);
Но я слышал, что правильный способ выразить это так:
int func();
В чем разница между этими двумя объявлениями функций в C и C ++?
c++
programming-practices
c
Гризли
источник
источник
Ответы:
C и C ++ отличаются в этом отношении.
C 2011 Онлайн Стандарт
Короче говоря, пустой список параметров в функции декларации указывает , что функция принимает неопределенное количество параметров, в то время как пустой список параметров в функции определения указывает , что функция не принимает ни одного параметра.
Что касается C, вы никогда не должны использовать пустой список идентификаторов в объявлении или определении функции. Если функция не предназначена для принятия каких-либо параметров, укажите это с помощью
void
списка параметров.Онлайн стандарт C ++
В случае C ++ пустой список параметров в объявлении или определении указывает, что функция не принимает аргументов и эквивалентна использованию списка параметров
void
.источник
В C функция с пустым списком параметров
()
может принимать все что угодно для своих аргументов. Буквально что угодно. Это обычно используется для реализации функции, которая может принимать переменное число аргументов , хотя в наши дни считается предпочтительным использовать более явный синтаксис многоточия(...)
для этих функций.В C функция со списком параметров
(void)
явно не принимает ничего для своих аргументов. Это означает, что компилятор может фактически сказать вам, что вы допустили ошибку, если попытаетесь что-то передать.В C ++ эти объявления функций эквивалентны. Пустой список параметров означает «нет параметров» так же, как
void
и.источник
()
для функций с переменным числом. У вас есть пример программы, которая использует это соглашение?...
синтаксиса, и она должна иметь хотя бы один именованный параметр. Определение такой функции()
приводит к неопределенному поведению - и у тела функции нет возможности использовать макросы, определенные в,<stdarg.h>
для чтения значений параметров. Это имело место со стандарта 1989/1990 гг....
синтаксиса, чтобы избежать неопределенного поведения.