我可以在枚举中使用gcc可见性属性吗?

时间:2014-05-01 19:57:11

标签: gcc g++

我有以下枚举: atttribute ((可见性("默认")))枚举MSG { 好, 失败, };

当我编译时,它给了我警告:

警告:'enum MSG'声明中忽略了属性 警告:'枚举MSG'的属性必须遵循'enum'关键字

当我在enum之后放置属性时,我得到以下错误:

警告:类型属性仅在类型定义时受到尊重 错误:在没有事先声明的情况下使用枚举'MSG' 错误:在'{'标记

之前的预期unqualified-id

有谁能告诉我如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

visibility属性适用于 symbols ,如函数和变量。不包含变量名的枚举类型的定义不会创建任何符号。

没有变量的枚举类型:

enum msg { OK, FAIL };

枚举变量:

enum msg message;

枚举类型和变量:

enum msg { OK, FAIL } message;

在第一种情况下,可见性属性根本没有可能影响的符号。

答案 1 :(得分:0)

您可以通过声明枚举类型来解决此问题:

enum class MSG : std::uint32_t __atttribute__((visibility ("default") ))
{
    OK,
    FAIL,
};

尽管这似乎是GCC中的错误,该错误已在6+版本中修复。 Related SO post