c++ - 是否可以在宏中设置预处理器条件?

标签 c++ conditional c-preprocessor substitution

我认为这种设计会大大提高我的代码的清晰度和维护需求。

我正在寻找的是这样的:

#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 条件混合即可继续这种趋势的能力将使代码更清晰 - 当然,代码清晰度是使用宏时最关心的问题之一,尤其是在这个级别。

最佳答案

据我所知,您不能在宏中包含 #if(或任何类似的内容)。 但是,如果条件在编译时已知,您可以安全地使用普通的 if 语句。编译器将对其进行优化(假设您已启用优化)。

它叫做“Dead code elimination

关于c++ - 是否可以在宏中设置预处理器条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5134479/

相关文章:

c++ - 如何将数据插入 map<string, set<string>> C++?

zend-framework - Zend 框架 : Conditional validation

c++ - 强制预处理器在重新定义中使用以前的定义

c - #define 在单个主文件中的范围

c++ - 找不到openCV头文件

c++ - 为什么我不能使用 Visual Studio 2013 调用 CTime::GetAsDBTIMESTAMP?

java - 有没有条件jackson json策略?

python - 太多的 if 语句

C 翻译阶段 4

c++ - STL容器的 `less`参数如何工作?