11
Cのvoidがvoidではないのはなぜですか?
JavaやC#などの厳密に型指定された言語では、メソッドの戻り値型としてvoid(またはVoid)を意味するようです: このメソッドは何も返しません。なし。返品不可。このメソッドからは何も受け取りません。 本当に奇妙なのは、Cではvoid、戻り値の型として、またはメソッドのパラメーターの型としても、 それは本当に何でもありえます。調べるには、ソースコードを読む必要があります。がんばろう。それがポインタである場合、あなたは何をしているかを本当に知っている必要があります。 Cの次の例を検討してください。 void describe(void *thing) { Object *obj = thing; printf("%s.\n", obj->description); } void *move(void *location, Direction direction) { void *next = NULL; // logic! return next; } 明らかに、2番目のメソッドはポインターを返しますが、これは定義上何でもかまいません。 CはJavaやC#よりも古いので、なぜこれらの言語はvoid「何も」を意味するものとして採用したのに、Cは「何も何も(ポインターの場合)」として使用しませんでしたか?