2

我在调用函数 '. 我花了很多时间来理解为什么编译器会忽略我的函数。为什么在编译时没有报告?编译器构建所有内容都没有错误,但没有带有“2”的消息框。

#include "stdafx.h"
#include <windows.h>

void tstB()
{
MessageBox(NULL, "2", NULL, NULL);
}

int _tmain(int argc, _TCHAR* argv[])
{
MessageBox(NULL, "1", NULL, NULL);
tstB;
return 0;
}
4

3 回答 3

5

这不是错误,因为它是一个有效的表达式。表达式的结果是一个函数指针。你可以使用这样的表达式:

void (*p)() = tstB;
于 2012-08-12T21:22:42.300 回答
3

tstB;使用as 表达式并没有什么不合法的地方,它是一个有效的语句。它类似于

int main() {
    int a;
    a;
}
于 2012-08-12T21:22:54.937 回答
2

你需要这样称呼它:

tstB();

否则,您只有一个指向函数的指针,这不是错误。

使用合适的编译标志,GCC 产生warning: statement has no effect [-Wunused-value]

于 2012-08-12T21:22:25.473 回答