【发布时间】:2020-07-28 02:40:32
【问题描述】:
我在 Ubuntu 18.04.3 LTS 中使用 gcc 版本编译器。使用 ROS 库。 我的代码很简单:
typedef unsigned char boolean;
#define TRUE (boolean)(1)
#define FALSE (boolean)(0)
以上编译后,我得到编译器错误:
error: missing binary operator before token "("
#define TRUE (boolean)(1)
^
上面#define的用法我猜是在OS库文件中。
../../../M3N_BSW/bsw_pc/virtual/ros/librosc/XmlRpc/include/ros_lm_xml_value.h:80:6: note: in expansion of macro ‘TRUE’
---------------------------------------------------------------------
#if (TRUE == ROS_LM_XML_VALUE_DOUBLE_ENABLE) /* [05] */
^~~~
但是当我定义如下时,没有错误。
#define SOMETHING ( ( uchar8 ) 1 )
类似地,关键字boolean 在其他地方用于声明变量,这些都可以正常工作。参考下面的代码..
和
使用地点是这样的:
#define ROS_LM_XML_VALUE_DOUBLE_ENABLE (FALSE)
someFunc()
{
boolean someVar=FALSE; //How come this is recognized correctly ?
#if (TRUE == ROS_LM_XML_VALUE_DOUBLE_ENABLE)
{
//Do something
}
}
关键字boolean 与#define 的使用在某处出错。
请指导我。
INTEGRITY OS 中使用了相同的代码。
没有编译器错误。
【问题讨论】:
-
这个错误可能来自一些试图使用
TRUE的代码,而不仅仅是#define。你能确定并显示这样一条线吗? -
@aschepler 感谢您的提问。我在问题中添加了用法。请务必参考并提供您宝贵的反馈意见。
-
而
boolean不是关键字。你知道它实际上是如何定义的吗? -
typedef unsigned char boolean;
-
我猜第二组括号被解释为函数调用,
标签: ubuntu gcc boolean c-preprocessor