2011-10-12 44 views
1

我有一個#define問題C 我正在使用MSP430F5418和IAR EW 5.10 我有一個名爲location的編譯指示,它將把下一個聲明變量放到指定的段中。 在下面的示例中,a將放入稱爲myseg的段中,而b不是。#define問題#pragma

 
#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"

回答

2

您不能在#define內使用#pragma,也不能使用其他方式。爲了避免這種限制,一些編譯器提供_Pragma operator(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"); 
+0

謝謝您的回答。在IAR中,我們可以使用@操作符。 http://supp.iar.com/Support/?note=39271 – Harikrishnan