Hec*_*ier 6 c++ c-preprocessor
我想知道以这种方式使用预处理器的缺点:
#define SOME_FUNCTION someFunction(someArgument)
Run Code Online (Sandbox Code Playgroud)
基本上我觉得这是错误的(或者当然不是最佳实践) - 但我不确定为什么......我的预处理技能充其量是生锈的.
问题是每次使用时都会重新评估参数:
#define MIN(A,B) ((A) < (B))?(A):(B);
Run Code Online (Sandbox Code Playgroud)
请注意,我必须将所有参数包装在'('')'中,以确保表达式对corectly进行求值.但是如果我们这样做会发生什么?
int s = MIN(++current,Max);
Run Code Online (Sandbox Code Playgroud)
编码这个我希望在调用函数之前电流增加一次.但是因为它是一个宏,它在测试中增加一次,如果它仍然小于Max,则增加一次
这在非常封闭的领域中有时很有用,可以以更易读的方式定义流程步骤:
void myfunc() {
DO_STEP_ONE;
THEN_ANOTHER_STEP;
KEEP_GOING;
LAST_STEP;
}
Run Code Online (Sandbox Code Playgroud)
但通常它只会让代码更难阅读和理解。
除非代码的读者值得详细了解这些 #define 的含义,而且这是某种捷径,否则您只是让人们查看两个地方来理解一行代码(文件顶部和文件中)函数)而不是一个。
我很少使用这种方法。
| 归档时间: |
|
| 查看次数: |
1459 次 |
| 最近记录: |