加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

这个想法在这里:
预处理器根据宏参数的编译时(常量)值替换不同的代码行.当然,我知道这种语法不起作用,因为#被视为string-ize运算符而不是标准#if,但我认为这证明了我试图实现的预处理器功能.

我知道我可以在那里放一个标准的if语句,并且编译器/运行时将留下来检查值.但是当arg总是传递一个常量值时,例如10.8或-12.5只需要在编译时进行求值,这对应用程序来说是不必要的工作.

这个数字运算应用程序的性能需求要求尽可能消除所有不必要的运行时条件,并且已经使用了许多常量值和宏(代替变量和函数)来实现这一点.在不必将预处理器代码与真实条件混合的情况下继续这种趋势的能力将使这更加清晰 – 当然,代码清洁是使用宏时最大的问题之一,尤其是在这个级别.

解决方法

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

它被称为“Dead code elimination”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读