【发布时间】:2011-07-05 07:17:31
【问题描述】:
我正处于这种设计将大大提高我的代码的清晰度和维护需求的位置。
我正在寻找的是这样的:
#define MY_MACRO(arg) #if (arg)>0 cout<<((arg)*5.0)<<endl; #else cout<<((arg)/5.0)<<endl; #endif
这里的想法:
预处理器根据宏参数的编译时(常量)值替换不同的代码行。当然,我知道这种语法不起作用,因为# 被视为字符串化运算符而不是标准的#if,但我认为这展示了预处理器的功能我正在努力实现。
我知道我可以在其中放一个标准的if 语句,然后编译器/运行时将检查该值。但这对于应用程序来说是不必要的工作,因为 arg 将始终传递一个常量值,例如 10.8 或 -12.5,只需要在编译时进行评估。
此数字运算应用程序的性能需求要求尽可能消除所有不必要的运行时条件,并且已使用许多常量值和宏(代替变量和函数)来实现这一点。无需将预处理器代码与真正的if 条件混合即可继续这一趋势的能力将使这变得更加清晰 - 当然,代码清洁度是使用宏时最大的问题之一,尤其是在这个级别。
【问题讨论】:
标签: c++ conditional c-preprocessor substitution