2012-08-12 138 views
2

我犯了一个错误调用函数'。我花了很多时间来理解为什么编译器会忽略我的功能。为什么在编译期间没有报告?编译器构建一切都没有错误,但tere没有“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; 
} 
+1

优化器*喜欢*这样的表达式。尝试'42;'同样的想法,不同的类型。否则,经典的C语法,任何表达式都可以通过把一个语句变成一个语句;分号结尾。 – 2012-08-12 21:28:32

回答

5

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

void (*p)() = tstB; 
2

你需要调用它像这样:

tstB(); 

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

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

3

没有任何关于使用tstB;作为一种表达,这是一个有效的语句是非法的。它类似于

int main() { 
    int a; 
    a; 
}