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));