ページ 11

プロトタイプ関数で宣言した引数の名前の変更について

Posted: 2013年2月02日(土) 11:17
by パクパク
いつも回答ありがとうございます。

文字列を入力するprompt()という関数を作成するという問題があるのですが
教科書の正答ではプロトタイプ関数の引数の名前と異なる名前が15行目で使われています。
やはり同じ変数名を使った方が良いのでしょうか。
回答お願い致します。

コード:

#include <stdio.h>

void prompt(char *msg, char *str);

int main(void)
{
  char str[80];

  prompt("文字列を入力してください: ", str);
  printf("入力された文字列: %s", str);

  return 0;
}

void prompt(char *msg, char *p)
{
  printf(msg);
  gets(p);
}

Re: プロトタイプ関数で宣言した引数の名前の変更について

Posted: 2013年2月02日(土) 11:27
by Priest
プロトタイプ宣言時の引数名は無視されますので、引数名はプロトタイプ宣言と違っていてもかまいません。

Re: プロトタイプ関数で宣言した引数の名前の変更について

Posted: 2013年2月02日(土) 11:33
by へにっくす
コンパイラにとって、同じ関数かどうかは、関数名と、戻り値、引数の型であって、引数の名前まで入っていません(指定しなくてもよい)。
なので掲示したコードでは間違ってはいません。

コード:

//引数の名前を指定しないでもok
void prompt(char*, char*);

//実装でも引数を使用しない場合は、名前を省略できる
//しかし使わないなら消した方がいいけどねw
void prompt(char *, char*)
{
    puts("OK?");
}

Re: プロトタイプ関数で宣言した引数の名前の変更について

Posted: 2013年2月02日(土) 11:46
by パクパク
Priest さんが書きました:プロトタイプ宣言時の引数名は無視されますので、引数名はプロトタイプ宣言と違っていてもかまいません。
へにっくす さんが書きました:コンパイラにとって、同じ関数かどうかは、関数名と、戻り値、引数の型であって、引数の名前まで入っていません(指定しなくてもよい)。
なので掲示したコードでは間違ってはいません。
お二方、返信どうもありがとうございました。