以下代码将编译为C,但不能编译为C++:
#include <stdio.h>
struct somestruct {
int id;
enum {
STATE1 = 0,
STATE2,
STATE3,
STATE4,
} state;
};
int main(int argc, char *argv[])
{
static struct somestruct s;
if (s.state == STATE1) {
printf("state1\n");
}
return 0;
}
在C++中,我将不得不使用
somestruct::STATE1
(因为枚举声明仅限于struct / class?)。我正在处理的项目将用C编写,但是当前我们使用一些C++库(Arduino),因此我们正在使用C++编译器来编译c代码。那么有什么方法可以使上述代码在C++中编译?
最佳答案
您可以采用与两种语言都兼容的格式对其进行编码,例如:
typedef enum
{
STATE1 = 0,
STATE2,
STATE3,
STATE4,
} eState ;
struct somestruct
{
int id ;
eState state ;
};
另外,如果您确实不能更改struct和enum定义,则以下内容是可移植的(如果很丑陋),并且要求您更改对枚举的每个引用,而不是单个定义(即,IMO的优点不多):
#if defined __cplusplus
#define SOMESTRUCT(e) somestruct:: e
#else
#define SOMESTRUCT(e) e
#endif
然后:
...
if (s.state == SOMESTRUCT(STATE1)) {
...