在C?</xyz>中使用“#pragma section <xyz>”有什么用?

时间:2012-08-16 06:09:59

标签: c pragma

C中"#pragma section <XYZ>"的用途是什么?

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

#define XYZ "ITEM 26.G03"

#pragma section <XYZ>

其中XYZ为:#define XYZ "ITEM 26.G03"

我需要对"#pragma section"

的使用进行一些解释

2 个答案:

答案 0 :(得分:7)

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

#pragma name

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

例如 gcc编译器接受列出的编译指示列表here

对于#pragma section gcc 的文档说:

  

section(“section-name”)通常,编译器会将代码放入其中   在文本部分生成。但是,有时您需要额外的   部分,或者您需要某些特定功能才能出现   特节。 section属性指定一个函数   生活在一个特定的部分。例如,声明:

      extern void foobar (void) __attribute__ ((section ("bar")));
     

将函数foobar放入条形部分。

     

某些文件格式不支持任意部分,因此该部分   属性并非在所有平台上都可用。如果你需要映射   将模块的全部内容添加到特定部分,请考虑使用   相反,链接器的设施。

有关here的更多信息。

答案 1 :(得分:4)

部分在.obj文件中创建一个部分 有关详细信息,请参阅MSDN

代码和数据在目标文件的各个部分中生成,由链接器组合成可执行文件,最终位于特定位置的目标内存中。默认部分是预定义的并具有某些属性。 部分编译指示可用于更改默认属性,定义新部分以及控制代码和变量到特定部分的分配,以及链接器命令文件的位置。

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