#pragma init(仅限于 C)

适用的调用

表 1. 接受给定编译指示的调用
编译指示 (pragma) xlc (编译 C) xlC (编译 C++) xlclang(编译 C) xlclang++(编译 C++)
#pragma init      
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表

类别

对象代码控制

用途

指定在调用 main() 之前运行时库调用函数列表的顺序。

对于共享库,将共享库装入到内存时将调用 init 函数。 例如,使用动态装入时,会在调用 dlopen () 时发生此情况。

语法

读取语法图跳过可视语法图#pragmainit( ,功能名称 )

使用量

在编译指示中指定的任何函数都应该具有返回类型 void (例如, void fA();) ,并且不采用任何参数。 接受具有非空返回类型的函数,但会废弃返回值。

由于参数将包含垃圾值,因此将忽略采用参数的函数并发出警告。

在同一编译单元中,将按指定的顺序调用 pragma init 中的函数列表。 同样,在同一编译单元中,将按照在源中迂到编译指示的顺序来调用在多个 pragma init 中指定的函数。

通常,跨文件和跨库的静态初始化顺序是非标准的,因此是不可移植的行为。 建议不要构建对此行为的任何依赖关系。 未定义跨文件的函数顺序,即使在使用 -Wm 选项时也是如此。

当混合 C 和 C++ 文件时,未定义 C 文件中的 init 函数相对于 C++ 文件中的静态构造函数/析构函数的相对顺序。 -qunique 选项可以与 pragma init进行交互。

注: 必须在链接时使用 C++ 调用,例如 xlC 或可再分发的工具 linkxlCmakeC++SharedLib

相关信息