以下代码将编译为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 ;
};
或者,如果您真的无法更改结构和枚举定义,那么以下是可移植的(如果丑陋),并且要求您更改对枚举的每个引用而不是单个定义(即它没有什么优点IMO):
#if defined __cplusplus
#define SOMESTRUCT(e) somestruct:: e
#else
#define SOMESTRUCT(e) e
#endif
然后:
...
if (s.state == SOMESTRUCT(STATE1)) {
...