code_seg pragma

指定对象 (.obj) 文件中存储函数的文本节(段)。

语法

#pragma code_seg( [ "section-name" [ , "section-class" ] ] )
#pragma code_seg( { push | pop } [ ,identifier ] [ , "section-name" [ , "section-class" ] ] )

参数

push
(可选)将一个记录置于内部编译器堆栈上。 push 可以具有 identifier 和 section-name

pop
(可选)从内部编译器堆栈的顶部移除记录。 pop 可以具有 identifier 和 section-name。 通过使用 identifier,你只需使用一个 pop 命令即可弹出多条记录。 section-name 在弹出后成为活动文本节名称

identifier
(可选)当与 push 一起使用时,为内部编译器堆栈上的记录指定名称。 与 pop 一起使用时,此指令会从内部堆栈弹出记录,直到移除 identifier 为止。 如果在内部堆栈上未发现 identifier,则不会弹出任何内容。

"section-name"
(可选)分区的名称。 当与 pop 一起使用时,将弹出堆栈,且 section-name 会成为活动文本节名称。

"section-class"
(可选)已忽略,但包含在内以便与 2.0 版之前的 Microsoft C++ 版本兼容。

备注

对象文件中的分区是作为单元加载到内存的已命名数据块。 文本节是包含可执行代码的节。 在本文中,术语“段”和“节”的含义相同

code_segpragma 指令指示编译器将翻译单元中的所有后续对象代码放入名为 section-name 的文本节中。 默认情况下,对象文件中用于函数的文本节的名称为 .text。 没有 section-name 参数的 code_segpragma 指令将后续对象代码的文本节名称重置为 .text

code_segpragma 指令不控制为实例化模板生成的对象代码的放置。 它也不控制编译器隐式生成的代码,例如特殊成员函数。 若要控制该代码,建议改用 __declspec(code_seg(...)) 特性。 使用该属性可以控制所有对象代码的放置,包括编译器生成的代码。

有关不应用于创建节的名称的列表,请参阅 /SECTION

还可以为初始化数据 (data_seg)、未初始化数据 (bss_seg) 和常量变量 (const_seg) 指定节。

可以使用 DUMPBIN.EXE 应用程序查看对象文件。 用于每个支持的目标体系结构的 DUMPBIN 版本随 Visual Studio 一起提供。

示例

以下示例演示如何使用 code_segpragma 指令控制对象代码的放置位置

// pragma_directive_code_seg.cpp
void func1() {                  // stored in .text
}

#pragma code_seg(".my_data1")
void func2() {                  // stored in my_data1
}

#pragma code_seg(push, r1, ".my_data2")
void func3() {                  // stored in my_data2
}

#pragma code_seg(pop, r1)      // stored in my_data1
void func4() {
}

int main() {
}

另请参阅

code_seg (__declspec)
Pragma 指令以及 __pragma_Pragma 关键字