c - 如何将字符串与带有点的 C 预处理器连接起来?

标签 c concatenation c-preprocessor

我已阅读以下问题,答案似乎很清楚: How to concatenate twice with the C preprocessor and expand a macro as in "arg ## _ ## MACRO"?

但是如果 VARIABLE 末尾有一个点呢?

我正在尝试做一个简单的宏来增加结构中的计数器以用于调试目的。即使没有上述问题的帮助,我也可以轻松地做到这一点

#ifdef DEBUG
#define DEBUG_INC_COUNTER(x) x++
#endif

并调用它

DEBUG_INC_COUNT(debugObj.var1);

但添加“debugObj”。每个宏似乎都非常多余。但是,如果我尝试连接:

#define VARIABLE debugObj.
#define PASTER(x,y) x ## y++
#define EVALUATOR(x,y)  PASTER(x,y)
#define DEBUG_INC_COUNTER(x) EVALUATOR(VARIABLE, x)
DEBUG_INC_COUNTER(var)

gcc -E macro.c

我明白了

macro.c:6:1: error: pasting "." and "var" does not give a valid preprocessing token

那我应该怎么改呢

DEBUG_INC_COUNTER(var);

产生

debugObj.var++;

?

最佳答案

省略##;只有当你想加入字符串时才需要这样做。由于参数不是字符串,它们之间的空格无关紧要(debugObj .var1debugObj.var1 相同)。

关于c - 如何将字符串与带有点的 C 预处理器连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085594/

相关文章:

c - 服务器中的父进程卡在接受调用中。我如何从 child 那里干净地终止 parent

c - 什么是不同的功能 : `malloc()` and `kmalloc()` ?

c - 预处理器宏字符串化

c-preprocessor - 如何使用 autoconf 为 #define 指定值?

macros - C预处理器: include based on define

c - Execvp 内存错误

c - 为什么我们不能在 C 中使用变量作为 e 的值

video - ffmpeg 交叉淡入淡出 2 个视频

c++ - 连接 4 位整数

string - Julia:用分隔符连接字符串(相当于 R 的粘贴)