C预处理器更换无法正常工作

时间:2017-03-17 10:21:19

标签: c c-preprocessor preprocessor

#include <stdio.h>
#define VAR cc

int main(void) {
    int ccc = 9;
    printf("hell loo %d", VARc);
    return 0;
}

我对此代码的理解意味着预处理器找到VAR的任何位置,它将用cc替换它,因此printf将具有正确定义的变量ccc,但代码错误了。有人可以请帮助

<小时/> 编辑1

我得到的错误是

test.c: In function ‘main’:
test.c:16: error: ‘VARc’ undeclared (first use in this function)
test.c:16: error: (Each undeclared identifier is reported only once
test.c:16: error: for each function it appears in.)

2 个答案:

答案 0 :(得分:10)

那不行。预处理器可以处理整个令牌,而不是字符串。

如果你想要连接,你可以这样做:

workCompleted

答案 1 :(得分:0)

这不起作用的原因是:

标记化在预处理之前,换句话说,在宏扩展之前识别预处理文件中的标记。

由于 CPP贪婪,它会将VARc视为与标识符类别相关的单个标记,并且与宏定义中的VAR不同。这就是它无法替代的原因。

因此解决方案之一是使用串联或为VARc创建另一个宏。