Gcc 是否可能有弱枚举?

Gcc 是否可能有弱枚举?,gcc,weak,Gcc,Weak,我使用的是gcc,我正在分发一个对象文件,它可以与一些第三方代码结合使用。我有一些东西看起来像这样: void fn3rdParty(int bar) __attribute ((weak)); void fn(void) { if(fn3rdParty) fn3rdParty(SOME_ENUM); } 其中,某些_ENUM是一个ENUM,由第三方代码(如果存在)定义。我试图将一些_ENUM声明为弱int,但gcc抱怨类型被重新定义。我想知道有没有办法?(我希望避免

我使用的是gcc,我正在分发一个对象文件,它可以与一些第三方代码结合使用。我有一些东西看起来像这样:

void fn3rdParty(int bar) __attribute ((weak));

void fn(void) {
    if(fn3rdParty)
        fn3rdParty(SOME_ENUM);
}
其中,某些_ENUM是一个ENUM,由第三方代码(如果存在)定义。我试图将一些_ENUM声明为弱int,但gcc抱怨类型被重新定义。我想知道有没有办法?(我希望避免一个.o文件用于此软件,另一个不使用)


John

在编译期间用数字替换枚举(
int
s,如果未另行指定)
.o
不能包含枚举。是否缺少包含枚举定义的头文件?啊。。。因此,枚举不被视为外部符号。。。这是不幸的,因为如果试图链接到不同版本的第三方软件,会导致问题。我将与第三方讨论,并可能将这些转移到ints。感恩节是藏在兜帽下的礼物。如果有人更改枚举定义并重新编译一个库,但不重新编译另一个库,则会发生不好的事情。但我看不出你的问题,是什么阻止你在需要时只使用枚举?或者我误解了并且
一些_ENUM
实际上是枚举类型(全局?)变量而不是枚举常量?作为问题的背景:一些人得到.o文件,一些人得到.c文件。如果他们得到了.c文件,而不是第三方软件,这仍然需要构建。除此之外,我没有考虑到枚举是常量这一事实,也不会对第三方软件的不同版本起作用,这是我必须解决的另一个问题。