10

重複の可能性:
C および C++ の main 関数の型をユーザーが定義できるのはなぜですか?

ボイドとは?voidの適切な使用例を教えてください。void main (void)また、 orと書くときの違いは何main()ですか?

4

5 に答える 5

13

Cでは、一般に、(void)関数呼び出しに引数が不要であることを()意味し、不特定の数の引数を意味します。

例えば

void foo(void)
{
   // body
}

void bar()
{
    //body
}

通話環境では、

foo();  // Correct 
foo(1); // Incorrect
bar();  // Correct
bar(1); // Also correct

以上が一般的な説明でした。

しかし、 main() の場合、C99 Standard は次のように述べています。

5.1.2.2.1 プログラムの起動

プログラムの起動時に呼び出される関数は main と呼ばれます。実装は、この関数のプロトタイプを宣言していません。これは、戻り値の型が int で、パラメーターなしで定義されます。 int main(void) { /* ... */ }

また

2 つのパラメーター (ここでは argc および argv と呼ばれますが、宣言されている関数に対してローカルであるため、任意の名前を使用できます): int main(int argc, char *argv[]) { /* ... */ }または同等のもの。

また

他の実装定義の方法で。

したがって、このvoid main(void)戻り値の型は である必要がありますint

そして最後に、 formain()には戻り値の型が指定されていないため、暗黙的に戻り値の型は になりますint

于 2012-12-14T10:32:12.267 に答える
2

次のようにメインの戻り値の型を除外します

main(){
}

それが型であることを意味するのではなくvoid、コンパイラに依存します。一般的には次のように解釈されていると言えると思います。

int main(){
}

voidタイプはコンパイラに「エンティティ」(「ストレージ」なし)がないことを伝えます。

void func(int i)

int を取りますが、何も返しません。パラメータの場合、これは次のとおりです。

void func()

これと同等です:

void func(void)

これは、パラメーターを取らないことをより明示的に示しています。別の話は、型void *ある型、無次元のものへのポインターです。

于 2012-12-14T10:49:17.740 に答える
2

基本的にvoidはデータ型であり、基本的にメソッド宣言で使用されます。それは何も意味しないか、タイプがないことを意味します。例えば:

1) int myFunc(void)-- 関数は何も取りません。

2) void myFunc(int)-- 関数は何も返さない

3) void* data;-- 'data' は不明な型のデータへのポインタであり、逆参照できません

于 2012-12-14T11:06:47.540 に答える
1

ボイドは「空」を意味します。void main()の例では、関数main()が値を返さないことを意味します。void main()は絶対に避けてください(しゃれは意図していません)。代わりにint main()を使用してください。int main()は、プログラムが終了時にint型の値をOSに返すことができることを確認します。voidには他にも多くの用途があります。これについて詳しく知りたい場合は、このWebサイトをチェックしてください。

于 2012-12-14T10:34:13.457 に答える
0

void値のないデータ型です。また、完成できない不完全なデータ型でもあります。関数の戻り値の型として使用すると、関数が値を返さないことを示します。

void foo(int x);

パラメーター リストとして使用すると、関数が引数を取らないことを示します。

void bar(void);

これは、関数が指定されていない数の引数を取ることを示す空のパラメーター リストとは異なります (C では、C++ では、空のパラメーター リストは を使用するのと同じですvoid)。

void bletch();

オブジェクト (変数) を入力できませんvoid。ただし、型のポインターを宣言することはできますvoid *。これらは「ジェネリック」ポインターであり、明示的なキャストなしで他のポインター型との間で変換できます。標準のメモリ割り当て関数malloccalloc、およびreallocすべての戻り値は次のvoid *とおりです。

double *darr = malloc(sizeof *darr * rows);

ホストされた実装 (基本的に、オペレーティング システムを使用するもの) では、次のmainように宣言する必要があります。

int main(void)

また

int main(int argc, char **argv) // the parameter names can be whatever you want,
                                // but argc and argv are the usual convention;
                                // char **argv is equivalent to char *argv[]

または他の実装定義の方法で。実装受け入れることができます

void main()

の正当な署名としてmainしかし、どこかにそれを明示的に文書化する必要があります。

于 2012-12-14T13:12:25.187 に答える