#define #pragma问题

时间:2011-10-12 12:08:29

标签: c c-preprocessor pragma iar

我在C中遇到#define问题 我使用的是MSP430F5418和IAR EW 5.10 我有一个名为location的pragma,它将下一个声明变量放到指定的段中。 在下面的示例中,a将放入名为myseg的段中,而b则不放入。

 #pragma location="myseg"
 static const char a[] = "amma";
 static const char b[] = "amrita";

我有很多像这样的常量。 我想知道我是否可以做这样的事情......

#define TYPE location="myseg" \
       static const char 
#pragma TYPE a = "amma";
#pragma TYPE b = "amrita";
.....

这样我就可以在每个变量声明之前避免#pragma location="myseg"

1 个答案:

答案 0 :(得分:2)

您不能在#pragma内使用#define,也不能使用其他方式。

为了避免这种限制,一些编译器提供_Pragma operator(GCC,LLVM)(Visual C ++中的__pragma),它提供与#pragma指令相同的功能。此运算符可以在另一个宏中使用。找出您的编译器是否支持这样的pragma运算符。

使用它,你可以写:

#define DECLARE_IN_SEG(decl) \
    _Pragma(location="myseg") \
    static const char decl;

DECLARE_IN_SEG(a = "amma");
DECLARE_IN_SEG(b = "amrita");