c – 是否可以在宏中设置预处理器条件?
发布时间:2020-12-16 10:18:29 所属栏目:百科 来源:网络整理
导读:我的位置可以大大提高我的代码的清晰度和维护需求. 我正在寻找的是这样的: #define MY_MACRO(arg) #if (arg)0 cout((arg)*5.0)endl; #else cout((arg)/5.0)endl; #endif 这个想法在这里: 预处理器根据宏参数的编译时(常量)值替换不同的代码行.当然,我知道
我的位置可以大大提高我的代码的清晰度和维护需求.
我正在寻找的是这样的: #define MY_MACRO(arg) #if (arg)>0 cout<<((arg)*5.0)<<endl; #else cout<<((arg)/5.0)<<endl; #endif 这个想法在这里: 我知道我可以在那里放一个标准的if语句,并且编译器/运行时将留下来检查值.但是当arg总是传递一个常量值时,例如10.8或-12.5只需要在编译时进行求值,这对应用程序来说是不必要的工作. 这个数字运算应用程序的性能需求要求尽可能消除所有不必要的运行时条件,并且已经使用了许多常量值和宏(代替变量和函数)来实现这一点.在不必将预处理器代码与真实条件混合的情况下继续这种趋势的能力将使这更加清晰 – 当然,代码清洁是使用宏时最大的问题之一,尤其是在这个级别. 解决方法
据我所知,你的宏内部不能有#if(或任何类似的东西).
但是,如果条件在编译时已知,则可以安全地使用普通的if语句.编译器将对其进行优化(假设您已启用优化). 它被称为“Dead code elimination” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- objective-c – Xcode中的NSObject描述和自定义摘要
- ruby-on-rails – 生产(Heroku)上的Rails 3.1中显示为空白的
- cocos2d - 粒子系统工具(Particle Designer)
- objective-c – 如何接受编辑和解除包含自定义视图的弹出菜
- 甚至用PostgreSQL进行数据采样
- c# – 循环到LINQ转换 –
- 一直显示loading archetype list以及加载archetype.xml很慢
- vscode 配置c++记录
- c# – 手动连接Page_PreInit事件,AutoEventWireup设置为fal
- Using the Flex Compilers Flex编译器的使用 第四部分