我有以下代码块
global_definitions.h :(下面包含头文件和源文件):
typedef enum { FALSE = 0, TRUE = !FALSE } bool;
Header-File Log.h:
void Log_Leave_Func_Int
(
Log_Module_ID_t Module_ID,
const char *Function_Name,
const bool Has_Return_Value,
const int Return_Value
);
Source-File Log.c:
void Log_Leave_Func_Int
(
Log_Module_ID_t Module_ID,
const char *Function_Name,
const bool Has_Return_Value,
const int Return_Value
)
{
bool HRetVal = Has_Return_Value;
/* some code here */
}
现在,在编译我的程序时(使用CVI 2012),我收到错误"Log.h"(366,20) syntax error; found 'identifier' expecting ')'.
,引用了Log.h中读取const bool Has_Return_Value,
的行,这对我来说是一个完全的谜。
我已经尝试将bool的定义更改为
typedef enum { FALSE, TRUE } bool;
甚至
#define FALSE 0
#define TRUE 1
#define bool int
没有区别。因此,它与bool的定义无关(错误表示)。此外,局部变量HRetVal
(类型为bool)不会被标记为错误。
我也试过没有将参数声明为const
,这显示了另一条错误消息("Log.h"(366,3) Missing parameter type.
),但仍然无法编译。
将参数Has_Return_Value
的类型更改为int
可以很快地编译(毫不奇怪)。另一方面,使用普通int
并不是这里的目的。
我不允许使用typedef枚举的参数吗?如果是这样,那么为什么(我在其他地方使用typedef'd枚举没有任何问题)?有人可以解释一下这里可能出现的问题吗?
答案 0 :(得分:0)
如果您直接或间接地包含<stdbool.h>
,那么您将遇到问题。
另外,调用枚举bool
是一个问题,你是否希望从C ++中使用你的代码。我建议使用不同的名称或不同的外壳(可能是BOOL)以避免任何问题。或者,只需坚持int
,因为它是一个很好理解的C范例。