c
#c
Вопрос:
Одним из изменений для предстоящего стандарта C2x, по-видимому, является
Удаление определений функций K amp; R.
Из того, что я понимаю, определения стиля K amp; R являются причиной, по которой мы должны объявлять функцию, которая не принимает параметров как
void foo(void);
вместо
void foo();
Означает ли удаление стиля K amp; R в C2x, что мы можем / должны теперь просто использовать пустые скобки для функций, которые не принимают параметров, как в других языках?
Комментарии:
1. Насколько я могу судить, верно обратное…
2. Необходимость
(void)
применяется только к объявлениям функций, которые также не являются определениями. Для таких определений, как вы показываете()
, и(void)
они идентичны.3. @ChrisDodd да, вы правы, я отредактировал два фрагмента в своем вопросе. Я спрашивал об объявлениях.
4.
seems to be the
Не могли бы вы опубликовать источник информации?
Ответ №1:
Определения функций в стиле K amp; R — это такие вещи, как
int foo(a, b)
int a;
int b;
{
/* function body here*/
Они полностью ортогональны вопросу (void)
vs ()
в объявлении функции
Ответ №2:
Вот раздел 6.7.6.3 (Деклараторы функций) пункт 13 рабочего проекта по состоянию на декабрь 2020 года:
Для декларатора функции без списка типов параметров: если он является частью определения этой функции, функция не имеет параметров, и эффект будет таким, как если бы он был объявлен со списком типов параметров, состоящим из ключевого слова void; в противном случае указывается, что информация о количестве или типах параметров не отображается.прилагается.157) Декларатор функции предоставляет прототип для функции, если он включает список типов параметров.158) В противном случае считается, что объявление функции не имеет прототипа.
Таким образом, в определении функции вы сможете опустить (void)
, но вам все равно придется включить его в объявление функции.