![]() |
1
3
您的解决方案以及所有基于可移植宏的解决方案都是尽可能限制宏使用的一个很好的理由。现在,我几乎只将它们用于条件编译。 在定义常量方面,最好使用枚举。 对于像宏这样的函数,最好使用可以建议编译器内联的函数,或者仅仅依靠编译器来解决这个问题(它们通常很擅长)。 类似宏的函数是个坏主意的原因是,作为简单的文本替换,序列:
将实际评估
只要你了解这些限制,就一定要使用它们。我,我将依靠编译器为函数做正确的事情,这样我就不必太担心C的暗角:-) |
![]() |
2
2
对写入函数。
如果您希望美观,可以编写一些变量宏,根据参数的数量选择正确的函数。不过,这些都是很难写的。 如果你想坚持 只有 宏,您的选择不太友好。 阿贾伊B -s解决方案(根据注释固定)运行良好。 GCC支持一些 nice extensions 消除重新评估问题:
然后,您可以轻松地编写任何不受插入式或重新评估恐惧影响的n元宏。
|
![]() |
3
1
我认为你在问题中遗漏的关键点是“宏”,而不是宏。如果您将其进一步细分如下,则可以将其简化很多-
这也更容易理解。 |
![]() |
Timo · 如果宏变量后跟构成有效标识符的字符,则不会展开宏变量 7 年前 |
![]() |
user3623498 · 在#if中更改变量时出现问题 7 年前 |
![]() |
einpoklum · 来自#cmakedefine替换的意外结果 7 年前 |
![]() |
Joseph Franciscus · C中预处理器方法的别名++ 7 年前 |
![]() |
stoper · 防止同一宏在多个转换单元中具有不同的定义 7 年前 |
![]() |
СеÑгей · MinGW中预处理器g++的奇怪行为 7 年前 |