#define Проблема с #pragma - PullRequest
       43

#define Проблема с #pragma

1 голос
/ 12 октября 2011

У меня проблема с #define в C Я использую MSP430F5418 с IAR EW 5.10 У меня есть прагма с именем location, которая поместит следующую объявленную переменную в указанный сегмент. В приведенном ниже примере 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 Ответ

2 голосов
/ 12 октября 2011

Вы не можете использовать #pragma внутри #define и наоборот.

Чтобы обойти это ограничение, некоторые компиляторы предлагают оператор _Pragma (GCC, LLVM) (__pragma в Visual C ++), который обеспечивает те же функции, что и директива #pragma. Этот оператор может использоваться в другом макросе. Узнайте, поддерживает ли ваш компилятор такой оператор прагмы.

Используя это, вы можете написать:

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

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