параметр функции void как в определении, так и в объявлении? Или только один?

#c #gcc

#c #gcc

Вопрос:

Существует множество сообщений, объясняющих, почему явное выполнение foo(void) лучше, чем foo() потому, что оно указывает, что нет аргументов функции вместо неизвестного количества.

Однако, похоже, я не могу найти, лучше ли указывать void как в объявлении файла заголовка, так и в определении исходного файла, например:

foo.h

 void foo(void);
  

foo.c

 void foo(void)
{
     return;
}
  

или


foo.h

 void foo(void);
  

foo.c

 void foo()
{
     return;
}
  

Какая из них лучше использовать, и есть ли конкретная причина делать одно поверх другого?

Комментарии:

1. В основном основано на мнениях. Оба одинаковые. Любое другое мнение неверно 😉

2. @John3136 Действительно? «в первую очередь на основе мнений»? То, что стандарт за последние 27 лет явно документирует как неприемлемое и «может быть рассмотрено для отзыва в будущих версиях», не является вопросом мнения.

Ответ №1:

Объявления и определения функций в старом стиле с пустыми круглыми скобками являются устаревшей функцией (N1570 6.11.6, 6.11.7). Вряд ли есть какие-либо веские причины для их использования.

Используйте (void) последовательно, а не () .

Ответ №2:

В вашем конкретном случае это не имеет значения, однако это хорошая привычка писать:

 void foo(void)
{
  

потому что может наступить время, когда вы пишете тело функции, не имея предварительно отдельного прототипа, и это служит прототипом, тогда void foo() { как нет.