C #用#pragma定义问题

C #用#pragma定义问题,c,c-preprocessor,pragma,iar,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"; #pragma location=“myseg” 静态常量字符a[]=“amma”;

我对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"; #pragma location=“myseg” 静态常量字符a[]=“amma”; 静态常量字符b[]=“amrita”; 我有很多这样的常数。 我想知道我是否能做这样的事

#define TYPE location="myseg" \ static const char #pragma TYPE a = "amma"; #pragma TYPE b = "amrita"; ..... #定义类型location=“myseg”\ 静态常量字符 #pragma TYPE a=“amma”; #pragma TYPE b=“amrita”; ..... 这样我就可以避免在每个变量声明之前使用
#pragma location=“myseg”

#define
中不能使用
#pragma
,反之亦然

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

使用此选项,您可以编写:

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

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

谢谢你的回答。在IAR中,我们可以使用@operator。