2009-07-22 6 views
18

C関数が引数を受け付けない場合は、言語規則によって "void"パラメータで宣言/定義する必要がありますか? PC-Lintは引数リストに何もないときに問題があるようですが、言語構文の中に私が知らないものがあるかどうか疑問に思っていました。in c:func(void)vfunc()

編集:質問:C void argumentsが重複しています。これは、より多くの回答と説明があります。

答えて

33

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

int init (void) 
{ 
    return 1; 
} 

これは、第二のケースでは、コンパイラは、関数が本当にすべての引数なしで呼び出されたかどうかをチェックしませんので、

int init() 
{ 
    return 1; 
} 

の定義と同じではありません。 の代わりに、任意の数の引数を持つ関数呼び出しは、警告なしで受け入れられます(旧形式の関数定義構文、ANSIより前の互換性のためにのみ実装されています)。

+0

ありがとう、謎解き。 – noamtm

7

CのIIRC func(void)は、パラメータを取らない関数を宣言し、func()は任意の数のパラメータを取る関数を宣言します。後者は、ANSI Cより前のアーティファクトであると信じています。によれば、func()宣言は基本的に "パラメータに関する情報なし"という関数を宣言しています。

+0

func(...)として定義された任意の数のパラメータを取る関数ではありませんか? – noamtm

+2

あなたはK&R Cのパラメータリストが異なって(そしてあまり)定義されていないと確信しています。しかし、C++ではf()はf(void)と同じです –

+2

@noamtm - func(a、b、...)という形式の関数です。可変引数リストを取るC関数を宣言します。ある意味では、任意の数のパラメータを取ることになります。 –

関連する問題