C++ 编译器不';t报告代码中的错误

C++ 编译器不';t报告代码中的错误,c++,visual-studio-2010,C++,Visual Studio 2010,调用函数“”时出错。我花了很多时间来理解为什么编译器忽略了我的函数。为什么在编译时不报告它?编译器构建的所有内容都没有错误,但tere不是带有“2”的messagebox #包括“stdafx.h” #包括 void tstB() { 消息框(空,“2”,空,空); } int _tmain(int argc,_TCHAR*argv[] { 消息框(空,“1”,空,空); tstB; 返回0; } 您需要这样称呼它: tstB(); void (*p)() = tstB; 否则,您只有一个指

调用函数“”时出错。我花了很多时间来理解为什么编译器忽略了我的函数。为什么在编译时不报告它?编译器构建的所有内容都没有错误,但tere不是带有“2”的messagebox

#包括“stdafx.h”
#包括
void tstB()
{
消息框(空,“2”,空,空);
}
int _tmain(int argc,_TCHAR*argv[]
{
消息框(空,“1”,空,空);
tstB;
返回0;
}

您需要这样称呼它:

tstB();
void (*p)() = tstB;
否则,您只有一个指向函数的指针,这不是错误


使用合适的编译标志,GCC生成
警告:语句无效[-Wunused value]

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

tstB();
void (*p)() = tstB;

使用
tstB并不违法作为表达式,这是一条有效语句。类似于

int main() {
    int a;
    a;
}
优化器喜欢这样的表达式。尝试
42相同的想法,不同的类型。否则经典的C语法,任何表达式都可以通过放置;在它的末尾加上分号。