android - #define 预处理器如何在 C 中真正工作

标签 android c++ c

请考虑以下代码

#define FIRSTNAME ""
#define SECONDNAME "JOHN"
# define PATHSAVE(a) func(strcat(strcpy(tmpFileName, appDir), a))
int main() {
  PATHSAVE(FIRSTNAME SECONDNAME);
}

通过分析,我发现值“John”被传递给了函数 PATHSAVE。 我无法理解为什么在此函数中使用了两个参数 PATHSAVE(FIRSTNAME SECONDNAME)

最佳答案

你写的会展开如下

func(strcat(strcpy(tmpFileName, appDir), "" "JOHN"));
                                         ^^ ^^^^^^
                                         || ||||||
                                         || SECONDNAME
                                         ||
                                         FIRSTNAME

将两个参数传递给宏需要它们用 , 分隔,而不是用空格分隔

关于android - #define 预处理器如何在 C 中真正工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40677456/

相关文章:

java - 有api调用时如何在不重复代码的情况下膨胀progressBar布局

c++ - 使用 boost 处理 COM 变体

c - gdb 退出而不是生成 shell

c - 有符号到无符号的转换

java - 按字段过滤自定义 POJO 的 ListView

android - 强行关闭网络浏览器

android - Android 中的图形 API

c++ - 可以在可变参数模板中推导出容器类型吗?

c++ - ‘binary_semaphore’ 尚未在 ‘std’ 中声明

在窗口上创建 "overlay"