使用没有 () 的函数名不产生代码

当使用在程序中声明并且没有括号的函数名时,编译器不产生代码。 因为编译器计算函数地址,所以不论函数是否有参数,都会出现这样情况;然而,由于不存在函数调用运算符“()”,所以没有调用。 该结果类似于下面这样:

// 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");
}

请参见

概念

优化代码