编译错误枚举参数 - 为什么?

时间:2016-06-09 11:14:01

标签: c parameters enums typedef

我有以下代码块

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枚举没有任何问题)?有人可以解释一下这里可能出现的问题吗?

1 个答案:

答案 0 :(得分:0)

如果您直接或间接地包含<stdbool.h>,那么您将遇到问题。

另外,调用枚举bool是一个问题,你是否希望从C ++中使用你的代码。我建议使用不同的名称或不同的外壳(可能是BOOL)以避免任何问题。或者,只需坚持int,因为它是一个很好理解的C范例。