В чем разница между включением имени параметра в объявление функции и не включением одного? - PullRequest
7 голосов
/ 11 ноября 2010

Я помню, как читал ранее о значении (или его отсутствии) между включением имени параметра в объявление функции и не включением его.Но я не могу вспомнить, что я читал или где я это читал.

например,

void do_something(int *); // No parameter name included, only type.

против ...

void do_something(int * i); // type AND parameter name included.

Такв чем разница между этими двумя декларациями?Спасибо, что прочитали и, возможно, ответили на этот, возможно, тривиальный вопрос.

- ОБНОВЛЕНИЕ -

Хорошо, так что я прочитал набор руководств по стилю от старого профессора моего предупреждениявключая имя параметра в определение функции и НЕ использовать параметр в функции.

void do_something(int * i) { //code that doesn't use i;} //BAD
void do_something(int *) { //code that doesn't use i;} //OK

Ответы [ 5 ]

12 голосов
/ 11 ноября 2010

В том, что касается компилятора, нет никакой разницы.

Добавление значимых имен параметров является полезной формой документации.

1 голос
/ 11 ноября 2010

Техническая разница между этими декларациями отсутствует.Если бы вместо этого у вас было

void accumulate_stats(int * count);

или что-то похожее описательное, это улучшило бы самодокументирование.

1 голос
/ 11 ноября 2010

Разница в том, что вторая версия может быть более читабельной, если вы выберете хорошее имя параметра. Больше нечего сказать; -)

0 голосов
/ 11 ноября 2010

Для прямого объявления это не имеет никакого значения.

В реальном определении параметр без имени не проверяется для использования.Это способ использовать неиспользуемые параметры без какого-либо макроса UNUSED_PARAM (x) или какого-либо другого трюка, единственная цель которого - отключить компилятор.

0 голосов
/ 11 ноября 2010

В предварительной декларации не должно быть различий. Они оба описывают одну и ту же схему памяти для вызова, поэтому они должны быть полностью взаимозаменяемыми.

...