19

C関数が引数を受け入れない場合、言語規則によって「void」パラメータで宣言/定義する必要がありますか? 引数リストに何もない場合、PC-Lint に問題があるようです。それは、私が知らない言語構文にあるのではないかと考えていました。

編集:重複した(バックデュープ?最初に来た)質問C void argumentsを見つけました。これには、より多くの回答と説明があります。

4

2 に答える 2

36

void は、関数がパラメータを取らないことを意味します。例えば、

int init (void)
{
    return 1;
}

これは定義と同じではありません

int init ()
{
    return 1;
}

2 番目のケースでは、関数が実際に引数なしで呼び出されたかどうかをコンパイラがチェックしないためです。代わりに、任意の数の引数を持つ関数呼び出しは、警告なしで受け入れられます(これは、古いスタイルの関数定義構文である ANSI 以前との互換性のためにのみ実装されています)。

于 2009-07-22T08:45:29.247 に答える
7

C の IIRC func(void) はパラメーターを取らない関数を宣言しますが、 func() は任意の数のパラメーターを取る関数を宣言します。後者は、ANSI C より前のアーティファクトだと思います。

ここのウィキペディアによると、宣言 func() は基本的に「パラメーターに関する情報なしで」関数を宣言します。

于 2009-07-22T08:40:01.363 に答える