![]() |
1
16
它做什么
如果你读了普劳格的
The Standard C Library
(1992),你会看到
也就是说,通过这样做:
如前所述
通常,您不想这样做-您通常不想删除宏定义。但是,当你需要真正的函数时,你可以得到它。提供库的人可以很好地模拟标准C库的功能。 很少需要
还请注意,您很少需要使用显式
因为代币
如果您使用宏重写实现自己的函数,则可以使用它来获得良好的效果,尽管除非解释,否则可能会有点混淆。
|
![]() |
2
14
宏通常用于生成大量代码。它通常是一种非常本地化的用法,而且可以安全地使用
/编辑:作为一个例子,我用它来为我生成结构。以下是一个实际项目的摘录:
|
![]() |
3
6
因为预处理器
|
![]() |
4
2
我只在
|
![]() |
5
2
虽然我认为乔纳森·莱弗勒给了你正确的答案。这里有一个非常罕见的例子,我使用了一个#unde。通常,宏应该在许多函数中可重用;这就是为什么要在文件顶部或头文件中定义它。但有时函数中有一些重复的代码,可以用宏来缩短。
|
![]() |
6
1
两者都有一点。好的代码不需要使用
|
![]() |
7
1
除了修复宏污染全局名称空间的问题外,还有
|
![]() |
8
0
如果可以定义宏,则必须有一个用于取消定义的工具。我使用的内存跟踪器定义了自己的new/delete宏来跟踪文件/行信息。此宏将中断SC++L。
盲目地取消定义宏将增加混乱,降低可维护性,并可能破坏依赖于原始行为的东西。如果您是被迫的,至少使用push/pop在其他地方保留原始行为。 |
![]() |
Timo · 如果宏变量后跟构成有效标识符的字符,则不会展开宏变量 7 年前 |
![]() |
user3623498 · 在#if中更改变量时出现问题 7 年前 |
![]() |
einpoklum · 来自#cmakedefine替换的意外结果 7 年前 |
![]() |
Joseph Franciscus · C中预处理器方法的别名++ 7 年前 |
![]() |
stoper · 防止同一宏在多个转换单元中具有不同的定义 7 年前 |
![]() |
СеÑгей · MinGW中预处理器g++的奇怪行为 7 年前 |