pragma代码部分和数据部分有什么用?

时间:2012-03-15 09:02:57

标签: c compiler-construction pragma c-preprocessor

如果我在c源代码文件中使用以下两行,那么数据段和文本段究竟会发生什么?

#pragma CODE_SECTION(func1, "Sec1")
#pragma DATA_SECTION(globalvar1, "Sec2")

2 个答案:

答案 0 :(得分:5)

来源(包含示例):http://hi.baidu.com/jevidyang/blog/item/6d4dc436d87e3a300b55a918.html

注意:#pragma是特定于编译器的,因此编译器的语法可能会有所不同。

DATA_SECTION pragma在名为section name的节中为符号分配空间。 C语言中pragma的语法可以是:

#pragma DATA_SECTION (symbol, "section name");

C ++中pragma的语法可能是:

#pragma DATA_SECTION ("section name");

如果您要将数据对象链接到与.bss部分分开的区域,则DATA_SECTION pragma非常有用。


CODE_SECTION pragma在名为section name的节中为func分配空间。如果要将代码对象链接到与.text部分分开的区域,则CODE_SECTION pragma非常有用。 C语言中的pragma语法可以是:

#pragma CODE_SECTION (func, "section name")

C ++中pragma的语法可能是:

#pragma CODE_SECTION ("section name")

答案 1 :(得分:2)

#pragma表示“这里遵循一些实现定义的编译器特有的”。那么将会发生什么取决于您使用的编译器。如果编译器不支持这个特定的pragma,那么整个事情将被忽略。


然而,在这种情况下,这是相当明显的。

#pragma CODE_SECTION(func1, "Sec1")表示:“func1应该在程序存储器中,在名为Sec1的存储区中”。 Sec1将是一个只读存储器位置,其中将分配func1的实际代码。

#pragma DATA_SECTION(globalvar1, "Sec2")表示:“globalvar1应位于数据存储器中,位于名为Sec2的存储区中”。 Sec2将是一个读/写位置,其中将分配变量globalvar1。