1

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

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

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

#define TYPE location="myseg" \
       静态常量字符
#pragma TYPE a = "阿玛";
#pragma TYPE b = "amrita";
......

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

4

1 回答 1

3

您不能#pragma在 a#define中使用 a ,反之亦然。

为了规避这个限制,一些编译器提供了一个_Pragma运算符(GCC、LLVM)(在 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");
于 2011-10-12T12:13:28.553 回答