• ベストアンサー

C言語の関数定義について

今まで私は、 int TestFunc(int cnt, char *str) { のような定義の仕方をしてきましたが、この頃 TestFunc(cnt, str) int cntl; char *str; { のような定義の仕方を見かけます。どちらがスタンダードなのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.2

後者がCのANSI規格が出来る前の古い仕様です。ヘッダ等で関数の宣言だけする場合、古い仕様では int TestFunc(); というふうに引数型を宣言できないのでコンパイル時に引数型の不一致が検出できません。 現在のほとんどのコンパイラでは両方の記述を受け付けるはずですが、古いコンパイラでは古い仕様の記述しか受け付けません。 両者の記述の相互変換は、protoizeとunprotizeというツールで行えますので、古い仕様のコンパイラを使う時はunprotizeで古い仕様の記述に変換する必要があります。

rickgogo
質問者

お礼

すっきりしました。 ありがとうございました。

その他の回答 (2)

回答No.3

すでにお二人ともお答えになっているように, 後者は古い形式です. 僕の使っているコンパイラではコンパイルは通りますが, 「●●は古い形式」と警告を出してくれます. rickgogoさんの書き方の方がスタンダードですよ.

rickgogo
質問者

お礼

すっきりしました。 ありがとうございました。

  • khurata
  • ベストアンサー率40% (54/134)
回答No.1

 rickgogoさんが今までしてきた方が、より新しい書き方です。関数の型を黙示的にし、引数の型を外に出すのは、昔の Cの書き方です。  厳密な事を言うといろいろ細かい事もあるのですが、rickgogoさんが普段書かれている形式の方が新しい(と言っても、すでに何年も経っている書き方です)ですし、現在の標準になっているはずです。

rickgogo
質問者

お礼

すっきりしました。 ありがとうございました。

関連するQ&A

専門家に質問してみよう