在 Xcode 中使用后对外部变量值进行初始化

extern variable value initialization after its uses in xcode

本文关键字:变量值 初始化 对外部 Xcode      更新时间:2023-10-16

我通过导出和外部使用一些变量,如下所示:

文本.h

namespace xyz{
__attribute__((visibility("default"))) extern const abccore::id kTextClassID;
}

在文本中.cpp

namspace xyz
{
extern const abccore::id kTextClassID("ValueClass");
}

现在在其他文件中 MacStartup.cpp

#include "text.h"
__attribute__((constructor))
void MacWorkStartup()
{
auto var = abccore::kTextClassID;
//and use this.
}

现在顺序应该像第一个kTextClassID获得它的值,然后MacWorkStartup应该能够使用它。 但它首先来到MacWorkStartup函数,在那里我发现了一些垃圾值,然后它在cpp文件中获取其值。 在MacWorkStartup中要更改的内容,它将具有字符串 Value.It 在我们去年的版本中运行良好,但由于xcode升级或其他原因(我不知道(, 它现在不运行。

在不确定的多个翻译单元中初始化全局。所以你必须修复你的代码:

  • MacWorkStartup定义移动到与定义kTextClassID相同的文件中。
  • main中调用MacWorkStartup,而不是(不可移植的(属性构造函数。
  • 使用延迟初始化kTextClassID

    namespace xyz{
    __attribute__((visibility("default"))) const abccore::id& GetTextClassID()
    {
    static const abccore::id instance{"ValueClass"};
    return instance;
    }
    }
    
  • 如果相关/可能,constexpr(和consteval(可能会取代static