1

returnステートメントに関して、Microsoft Visual Studioのドキュメントには次のように書かれています

構文:

式を返します。

ここで、式はオプションとしてマークされています。続きます

式の値が存在する場合は、呼び出し元の関数に返されます。式を省略した場合、関数の戻り値は未定義です。

これは非常に明確ですが、一方で、空式の概念があります。これは私を混乱させます。空の式を何もないのではなく、空の式と考えると、関数があれば

void foo(void)
{
     return;
}

式 foo() は、空の式が許可されている場所で使用できます。たとえば、コードの動作

unsigned int i=0;
for(foo();i<10;i++) printf("%u",i);

定義されます。これはおそらく実用的な関連性がほとんどないことを認識していますが、このコンテキストで空の式が式ではない理由を理解したいと思います。

4

2 に答える 2

4

これはvoid 式と呼ばれます。そして、あなたがしたように void 式を使うことができますfor。void 式は、関数を呼び出すという副作用だけを行います。

実際、 の最初の節forが何らかのタイプの式である場合、それは void 式として評価されます:

C99 6.8.5.3forステートメント

... clause-1 が式の場合、制御式の最初の評価の前に void 式として評価されます。

C99 6.3.2.2void

void 式 (タイプ を持つ式void) の (存在しない) 値は、どのような方法でも使用してはならず、暗黙的または明示的な変換 ( への変換を除くvoid) をそのような式に適用してはなりません。他の型の式が void 式として評価される場合、その値または指定子は破棄されます。(void 式は、その副作用について評価されます。)

于 2013-10-20T09:26:26.347 に答える