起因
今天在vs2010中编写代码的时候,定义了一个函数 bool funcA(void);编译的时候,莫名其妙的报了个错误:
error C2061: 语法错误: 标识符“funcA”。
funcA明明已经定义了,在头文件中也声明了,但是编译器就认定 funcA无法识别。
解决历程
刚开始以为函数名起的不规范,重新命名后依然报同样的错,解决失败。
接着怀疑是不是头文件重复包含了,理了一遍头文件包含关系,确认没问题。
最后想着函数的类型是否有问题,参数类型void这绝对没有问题,函数返回类型bool应该也没问题啊,bool是c语言的基本类型啊。
但经过几番折腾后发现,罪魁祸首偏偏就是函数返回类型bool。
bool是标准C/C++中的布尔量,占一个字节大小内存,只有false或者true两种值,但是C语言是从C99才开始支持布尔型的,然而VS2010是不支持C99标准的,这是造成此次血案的根本原因。
BOOL是VS自家定义的宏:
typedef int BOOL;
#define FALSE 0
#define TRUE 1
也就是说BOOL其实是int类型,占四个字节大小内存,其值为FALSE或TRUE。
解决方法
知道原因就好办了,将bool funcA(void)重新定义成BOOL funcA(void),编译成功。