voidとは何ですか?誰かがいくつかの例を提供します、voidの適切な使用?そして、void main (void)
またはmain()
を書くときの違いは何ですか?
Cでは、一般に、_(void)
_は関数呼び出しに引数が不要であることを意味し、_()
_は引数の数が指定されていないことを意味します。
例えば.
_void foo(void)
{
// body
}
void bar()
{
//body
}
_
環境を呼び出す際に、
_foo(); // Correct
foo(1); // Incorrect
bar(); // Correct
bar(1); // Also correct
_
これが一般的な説明でした。
しかし、main()の場合、C99Standardは次のように述べています。
5.1.2.2.1プログラムの起動
プログラムの起動時に呼び出される関数の名前はmainです。実装は、この関数のプロトタイプを宣言していません。これは、戻り値の型がintで、パラメーターがない状態で定義されます。
int main(void) { /* ... */ }
または
2つのパラメーター(ここではargcおよびargvと呼びますが、宣言されている関数に対してローカルであるため、任意の名前を使用できます):
int main(int argc, char *argv[]) { /* ... */ }
または同等のもの。
または
他の実装定義の方法で。
したがって、このvoid main(void)
の戻り値の型はint
である必要があります。
そして最後に、main()
の場合、戻り値の型が指定されていないため、暗黙的に戻り値の型はint
になります。
基本的に、voidはデータ型であり、基本的にメソッド宣言で使用されます。 nothingまたはno typeを意味します。例えば:
1)int myFunc(void)
-関数は何も取りません。
2)void myFunc(int)
-関数は何も返しません
3)void* data;
- 'data'は不明なタイプのデータへのポインタであり、逆参照できません
のようにメインの戻り値の型を除く
main(){
}
void
型であるという意味ではなく、コンパイラによって異なります。一般的には次のように解釈されていると言えます。
int main(){
}
void
型は、コンパイラに「エンティティ」がない(「ストレージ」がない)ことを通知するため、
void func(int i)
intを取りますが、何も返しません。パラメータの場合、これは次のとおりです。
void func()
これと同等です:
void func(void)
これは、パラメータを受け取らないことをより明確に示しています。別の話はタイプvoid *
which is型、無次元のものへのポインタ。
ボイドは「空」を意味します。 void main()の例では、関数main()が値を返さないことを意味します。 void main()は絶対に避けて(しゃれは意図しない)、代わりにint main()を使用する必要があることをお伝えする義務があると感じています。 int main()は、プログラムが終了時にint型の値をOSに返すことができることを確認します。 voidには他にも多くの用途があります。これについて詳しく知りたい場合は、 このWebサイト を確認してください。
void
は、値のないデータ型です。 不完全データ型でもあり、完了できません。関数の戻り値の型として使用される場合、関数が値を返さないことを示します。
void foo(int x);
パラメータリストとして使用する場合、関数が引数をとらないことを示します。
void bar(void);
これは、関数が未指定引数の数を取ることを示す空のパラメーターリストとは異なります(Cでは; C++では、空のパラメーターリストはvoid
を使用するのと同じです) :
void bletch();
オブジェクト(変数)はvoid
と入力できません。ただし、タイプvoid *
のポインターを宣言できます。これらは「汎用」ポインターであり、明示的なキャストなしで他のポインタータイプとの間で変換できます。標準のメモリ割り当て関数malloc
、calloc
、および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[]
または他の実装定義の方法;実装may受け入れる
void main()
main
の正当な署名として、ただし、どこかに明示的に文書化する必要があります。