C прототипы функций a и имена переменных в зависимости только от типов данных

#c #function #prototype

#c #Функция #Прототип

Вопрос:

При объявлении прототипа функции в C есть ли разница между следующим:

 void SomeFunction( int Argument ) 
{
    //Stuff
} 
  

В сравнении

 void SomeFunction( int ) 
{
    //Stuff
} 
  

По сути, я спрашиваю, почему вы пишете имя аргумента переменной в прототипе функции, а не просто тип данных?

Ответ №1:

Имена аргументов не нужны компилятору в объявлениях функций. Это для потребления человеком. Они предоставляют дополнительную информацию о том, что делает функция. Хорошие имена функций в сочетании с хорошими именами аргументов служат мгновенной документацией для вашего метода.

Ответ №2:

Вам нужно имя аргумента, если вы действительно собираетесь использовать аргумент. Некоторые компиляторы (например, Microsoft VC ) выдадут вам предупреждение, если вы назовете аргумент, но не используете его нигде в функции.

PS То, что вы использовали в своем примере, является не прототипом, а фактическим определением функции. В прототипе имя аргумента является чисто необязательным.

Ответ №3:

дополнительный комментарий, касающийся разницы между «объявлением» и «определением». Оба ваших примера являются определениями:

 void SomeFunction( int Argument ) 
{
    //Stuff
} 
  

Прототип будет декларацией и будет выглядеть следующим образом:

 void SomeFunction( int ) ;
  

Итак, вы можете иметь в своем заголовке объявление, подобное приведенному выше. Затем в вашем cpp вы определяете функцию следующим образом:

 void SomeFunction( int Argument ) 
{
    Argument = Argument   1;
} 
  

Как вы видите, в объявлении не указывается имя аргумента, но затем определение указывает его и использует его.

Ответ №4:

Вам не нужно указывать имя аргумента ни в определении, ни в объявлении. Если вы это сделаете, они даже не обязательно должны быть одинаковыми. Вы должны написать его, если планируете фактически использовать аргумент.

Ответ №5:

Прототипу функции не нужны имена параметров, но ему нужны типы переменных. Каждый из них действителен:

 void function(int);

void function(int param);
  

Прототип используется, чтобы вы могли определять функции в любом порядке. Однако, если вы хотите видеть имена параметров (например, при наведении курсора мыши на функцию), имена должны быть в прототипе. Если у вас нет прототипа, вы увидите имена из определения.

Определение функции может использоваться как объявление, если прототипа нет, но оно должно быть определено до вызова функции. Конечно, будут использоваться имена переменных в определении.

Параметры должны иметь имена в определении, но в прототипах имена необязательны.