在C中使用"#pragma section <XYZ>"有什么用?

use*_*836 10 c pragma

"#pragma section <XYZ>"在C中有什么用?

我遇到过使用以下类型的C代码文件: -

#define XYZ "ITEM 26.G03"

#pragma section <XYZ>
Run Code Online (Sandbox Code Playgroud)

XYZ的位置是: #define XYZ "ITEM 26.G03"

我需要一些关于使用的解释 "#pragma section"

TOC*_*TOC 8

#pragma指令是一个特定于实现的指令,它是向编译器提供附加信息的标准方法.该指令具有以下形式:

#pragma name
Run Code Online (Sandbox Code Playgroud)

如果预处理器识别出指定的"名称",它将执行它们所代表的任何操作,或将信息传递给编译器.如果c实现不支持"name",则忽略它.

例如,gcc编译器接受此处列出的编译指示列表.

对于#pragma section,gcc的文档说:

section("section-name")通常,编译器将它生成的代码放在文本部分中.但是,有时您需要其他部分,或者您需要某些特定功能才能出现在特殊部分中.section属性指定函数位于特定部分中.例如,声明:

      extern void foobar (void) __attribute__ ((section ("bar")));
Run Code Online (Sandbox Code Playgroud)

将函数foobar放在bar部分.

某些文件格式不支持任意节,因此所有平台上都不提供section属性.如果需要将模块的全部内容映射到特定部分,请考虑使用链接器的工具.

更多关于这一点.


Jai*_*dra 5

Section在.obj文件中创建一个节。有关更多详细信息,
请参考MSDN

代码和数据在目标文件的各个部分中生成,然后由链接器组合成可执行文件,并最终位于目标位置的特定位置。默认部分是预定义的,并具有某些属性。所述部分编译指示可被用于改变默认属性,来定义新的部分,并且以控制的代码和变量特定部分的分配,并且与链接器命令文件,它们的位置沿着。

#pragma section定义一个节类,并且可以选择在该类中定义一个或两个节。节类控制放置在该类实例中的变量和代码的寻址和可访问性。