- ベストアンサー
C言語の関数定義について
今まで私は、 int TestFunc(int cnt, char *str) { のような定義の仕方をしてきましたが、この頃 TestFunc(cnt, str) int cntl; char *str; { のような定義の仕方を見かけます。どちらがスタンダードなのでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
後者がCのANSI規格が出来る前の古い仕様です。ヘッダ等で関数の宣言だけする場合、古い仕様では int TestFunc(); というふうに引数型を宣言できないのでコンパイル時に引数型の不一致が検出できません。 現在のほとんどのコンパイラでは両方の記述を受け付けるはずですが、古いコンパイラでは古い仕様の記述しか受け付けません。 両者の記述の相互変換は、protoizeとunprotizeというツールで行えますので、古い仕様のコンパイラを使う時はunprotizeで古い仕様の記述に変換する必要があります。
その他の回答 (2)
- yassan_yassan
- ベストアンサー率23% (15/65)
すでにお二人ともお答えになっているように, 後者は古い形式です. 僕の使っているコンパイラではコンパイルは通りますが, 「●●は古い形式」と警告を出してくれます. rickgogoさんの書き方の方がスタンダードですよ.
お礼
すっきりしました。 ありがとうございました。
- khurata
- ベストアンサー率40% (54/134)
rickgogoさんが今までしてきた方が、より新しい書き方です。関数の型を黙示的にし、引数の型を外に出すのは、昔の Cの書き方です。 厳密な事を言うといろいろ細かい事もあるのですが、rickgogoさんが普段書かれている形式の方が新しい(と言っても、すでに何年も経っている書き方です)ですし、現在の標準になっているはずです。
お礼
すっきりしました。 ありがとうございました。
お礼
すっきりしました。 ありがとうございました。