【发布时间】:2011-02-17 00:24:37
【问题描述】:
typedef enum BeNeLux
{
BELGIUM,
NETHERLANDS,
LUXEMBURG
} _ASSOCIATIONS_ BeNeLux;
当我尝试使用 C++ 编译器编译它时,我遇到了错误,但它似乎可以在 C 编译器中正常工作。所以这就是问题所在。是否可以在 C++ 中打包枚举,或者有人可以看到我为什么会收到错误消息?
错误是:
“BeNeLux 声明后缺少分号”。
我知道,在检查和重新检查之后,那里肯定有一个分号,并且在其余代码所需的任何地方。
附录:
_PACKAGE_ 只是一个例子。我正在重命名它。
_ASSOCIATIONS_ 不是比荷卢经济联盟的一种:
#define _ASSOCIATIONS_ __attribute__((packed))
对代码进行了 iffed,但只是为了确保它是 GNU C/C++。
#if defined (__GNUC__)
#define _ASSOCIATIONS_ __attribute__((packed))
#else
#define _ASSOCIATIONS_
这会导致问题吗?我认为 (GNUC) 适用于 C 和 C++
附录 2:
我什至尝试过
#ifdef __cplusplus
extern "C" {
#endif
typedef enum BeNeLux
{
BELGIUM,
NETHERLANDS,
LUXEMBURG
} _ASSOCIATIONS_ BeNeLux;
#ifdef __cplusplus
}
#endif
没有快乐。有人吗?
注意:-fshort-enums 是不可能的;寻找程序化解决方案。
【问题讨论】:
-
这是一个非标准功能。你用的是什么 C 编译器?
-
使用 gcc 3.3.5 或更低版本(必须使用这个旧版本)
-
打包一个枚举是什么意思?使底层类型尽可能小?
-
_PACK_和_PACKAGE_作为用户定义的宏名称都是非法的。以下划线开头的名称基本上是为编译器的内部标识符和标准库实现保留的。 (规则更复杂,但不要使用前导下划线。) -
@UncleBens:前导下划线在这里不是问题,因为我可以用 C 编译器很好地编译。 @大卫:是的。这是用于嵌入式编程
标签: c++ c enums compilation packing