"()" のない関数名とコードの生成

プログラム内で宣言した関数名をかっこなしで使用すると、コンパイラによるコードの生成が行われません。 これは、コンパイラにより関数のアドレスが計算されるため、この関数がパラメーターを受け取るかどうかに関係なく発生します。ただし、関数呼び出し演算子 "()" が存在しないため、呼び出しは行われません。 この結果は、以下に似ています。

// compile with /Wall to generate a warning
int a;
a;      // no code generated here either

Visual C++ では、警告レベル 4 を使用していても、診断出力が生成されません。 警告は発行されず、コードは生成されません。

次のサンプル コードは、コンパイルされ (警告あり)、エラーなしで正しくリンクされますが、funcn( ) への参照のコードは生成されません。 これを正しく機能させるには、関数呼び出し演算子 "()" を追加します。

#include <stdio.h>
void funcn();

int main() {
   funcn;      /* missing function call operator;
                  call will fail.  Use funcn() */
   }

void funcn() {
   printf("\nHello World\n");
}

関連項目

コードの最適化