Последствия удаления определений функций K

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) , но вам все равно придется включить его в объявление функции.