c中 #define 的不足
Underatanding of #define in c
本文关键字:#define 更新时间:2023-10-16
#define print(args) printf args
print(("Hello"));
我得到了输出
Hello
如果我调用打印,它可以正常工作。 你能解释一下它是如何工作的吗?
这是一个宏的示例。
编译程序时,第一步是预处理器。
预处理器查找您的宏:
#define print(args) printf args
这意味着,如果您的程序中有类似的东西
print(<some text>)
然后<some text>
的值将从您的宏中处理为args
,即代码
print(<some text>)
将替换为
printf <some text>
现在,您有以下代码行:
print(("Hello"));
如果你把<some text>
=args
=("Hello")
,那么预处理器将替换
print(("Hello"))
跟
printf ("Hello")
整条线将是:
printf ("Hello");
这是合法的C代码来打印Hello
。
相关文章:
- 与C代码相比,为什么C++代码不需要"#define _POSIX_C_SOURCE 200809L"?
- 以下 C++ 代码用于 -> "#define idiv(a, b) (((a) + (b) / 2) / (b))" 是什么?
- 如何以静态代码分析友好的方式使用 #define 防护?
- C++相当于整数的 #define
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 我们可以用 C 语言嵌套 #define 和 #if 吗?
- 如何将旧的 C 样式 #define 映射与现代C++进行调整?
- 找不到 #define 的函数定义
- "#define X X"是什么意思?
- 使用 constexpr 替换 #define 和 #ifdef 进行条件编译
- 野牛/flex:计算器将双精度值解释为整数,所以我添加了 YYSTYPE 双精度 #define 但我有多个编译错误
- 如何解决C++中声纳库贝静态代码分析错误"Explicitly define the missing copy constructor, move constructor .."
- c中 #define 的不足
- 使用 [#define & #ifdef] 跨文件激活代码块
- 如何避免#define语法的变量重新声明
- 使用 GCC 对 C 文件进行部分预处理(不删除 "define" 指令)
- 使用 #define 声明函数
- #define 宏中的括号失败
- 初始化在类类型 #define 中定义的非静态成员数组,不带默认 ctor