C预处理器&x2B;和=用法

C预处理器&x2B;和=用法,c,c-preprocessor,C,C Preprocessor,我正试图通过预处理器重新创建这一行 #pragma location = ADDR + OFFSET 目前,我已经非常接近使用这个()了: 如果我将=和+符号从 #定义测试(x)位置=##x##+偏移量 不幸的是,添加=或+符号会导致以下错误: test.c:3:27: error: pasting "=" and "ADDR" does not give a valid preprocessing token #define TEST(X) location = ## X ## +

我正试图通过预处理器重新创建这一行

#pragma location = ADDR + OFFSET
目前,我已经非常接近使用这个()了:

如果我将=和+符号从

#定义测试(x)位置=##x##+偏移量

不幸的是,添加=或+符号会导致以下错误:

test.c:3:27: error: pasting "=" and "ADDR" does not give a valid preprocessing token
 #define TEST(X) location  =  ## X ##   + OFFSET
                           ^
test.c:4:35: note: in expansion of macro ‘TEST’
 #define TESTE(X) EXPAND_AND_QUOTE(TEST(X))
                                   ^~~~
test.c:6:9: note: in expansion of macro ‘TESTE’
 _Pragma(TESTE(ADDR));
         ^~~~~
test.c:6:15: error: pasting "ADDR" and "+" does not give a valid preprocessing token
 _Pragma(TESTE(ADDR));
               ^
test.c:3:33: note: in definition of macro ‘TEST’
 #define TEST(X) location  =  ## X ##   + OFFSET
                                 ^
test.c:6:9: note: in expansion of macro ‘TESTE’
 _Pragma(TESTE(ADDR));
         ^~~~~
有什么想法吗?
谢谢

您不需要使用
##
运算符:

#define QUOTE(str)  #str
#define TESTE(X)    QUOTE(location = X + OFFSET)

_Pragma(TESTE(ADDR));

为什么要在宏定义中使用标记粘贴?只需将其定义为
#定义测试(X)位置=(X)+偏移量
(注意括号,以便在
X
是表达式的情况下进行适当分组)。
#define QUOTE(str)  #str
#define TESTE(X)    QUOTE(location = X + OFFSET)

_Pragma(TESTE(ADDR));