在 Xcode 中使用后对外部变量值进行初始化
extern variable value initialization after its uses in xcode
我通过导出和外部使用一些变量,如下所示:
文本.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
。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- 在 Xcode 中使用后对外部变量值进行初始化
- 使用常量值初始化 std::array
- 具有空构造函数使数组未初始化会使计算速度变慢
- 聚合初始化的 C++17 扩展是否使大括号初始化变得危险?
- 可以使用初始化器列表更改常量值
- 如何检索模板化类的提升::变量值
- 如何设计初始化后不变的类,并且在我的整个程序中仅存在一次
- 嵌套变体的简明初始化语法
- C2057构造函数初始化列表中的常量值定义出错
- 是以前初始化的内存,保证在放置新调用后保持不变
- 初始化静态成员变量值的正确位置
- C++提升错误:无法在初始化中将常量值类型*(又名常量 wchar_t*)转换为常量字符*
- 使用提升分配使用变量值初始化类似 JSON 的映射
- 未初始化的枚举变量值
- 如何从变量值初始化对象
- 正确的变体初始化
- 使用类 A 中的常量值初始化类 B
- C++当我离开默认构造函数时,我的初始化字符串消失了,但我的其他成员变量值没有