"()" のない関数名とコードの生成
更新 : 2007 年 11 月
プログラムで宣言した関数名にかっこを付けないで使用すると、コードが生成されなくなります。コンパイラが関数アドレスを計算するため、これは関数がパラメータをとるかどうかには関係ありません。ただし、関数呼び出し演算子 "()" が存在しないので、呼び出しは行われません。結果は、次のようになります。
// 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");
}