![]() |
1
6
编译器永远看不到宏-预处理器替换文本。 所以,当你写的时候:
这可能会对行为产生影响,但这取决于您的宏。在这种情况下,没有那么多(也有性能和调试方面的差异,但我们在这里不必担心它们)。 例如,您这样定义宏(注意 我 变量)
并这样称呼:
|
![]() |
2
3
|
![]() |
3
3
你的例子
宏接受参数,但在尝试算术之前,它没有类型处理。即使这样,预处理器可以计算的任何参数都可以做一些有用的事情。或者它可以做一些意想不到的事情。 作为一个简便的经验法则,使用的宏越多,代码的可理解性和可维护性就越差。 |
![]() |
4
2
在这种特殊情况下 宏实际上只是在实际编译代码之前执行的文本替换,因此不需要类型信息;宏的使用只是被宏内容替换,其余的由编译器处理。
由于没有参数被引用两次,所以在执行每一个参数之后没有明显的差异,但是它们仍然被区别对待。
|
![]() |
5
0
所有的答案都是正确的。 由于宏是在编译器将代码翻译成机器指令之前由预处理器处理的,因此它们可能会产生其他人提到的有趣的副作用。 我不完全同意宏降低代码可理解性的说法。我认为,如果谨慎、明智地使用它们,并且可以证明它们是正确的,那么它们可以导致更容易理解(我敢说吗?)自我记录代码。 例子:
是的,我知道MAX(x++,y)会有不良的副作用,但这就是智能使用的原因。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 7 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 8 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 8 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 8 月前 |