我init_seg
用来控制三个 C++ 类对象的创建。每个对象位于不同的源文件/翻译单元中。调试显示在 CRT 初始化期间正在按预期创建对象。
对象按其源文件的字母顺序进行初始化。我想更改它,因为它不太正确。我访问了 MSDN 上的页面init_seg
,它指出用途是:
#pragma init_seg({ compiler | lib | user | "section-name" [, func-name]} )
看起来lib
and的使用section-name
是互斥的,所以我不清楚如何使用init_seg(lib)
和提供部分/组名称来获得按字母顺序排列的权利。
当我尝试使用按字母顺序排列的字符串来控制顺序时:
#pragma init_seg(lib, "01")
它会导致警告,我猜这意味着事情不会按预期工作:
warning C4081: expected ')'; found ','
".CRT$XCB"
当我尝试直接使用、".CRT$001"
和".CRT$XCB001"
(以及使用字母顺序的其他变体)直接插入 CRT 启动代码时:
#pragma init_seg(".CRT$XCB")
它导致另一个警告,我猜这意味着事情不会按预期工作:
warning C4075: initializers put in unrecognized initialization area
我在 Stack Overflow 上发现了一个关于它的问题,但答案是猜测,它不包括多个翻译单元。我还在 Wayback Machine 上找到了KB104248的存档,但它也没有太大帮助,因为它只显示了compiler
,lib
和user
.
所以我的问题是,我如何利用init_seg
来控制在三个不同的源文件中创建三个对象的精确顺序?