c/c++语言开发共享编译器是否注意像if(0)这样无用的代码?

最近,我正在编译Windows下的ffmpeg代码使用带有intel编译器的VS2010。 对于以下代码:

void ff_dcadsp_init(DCADSPContext *s) { s->lfe_fir = dca_lfe_fir_c; if (ARCH_ARM) ff_dcadsp_init_arm(s); } 

ARCH_ARM定义为0

当我在linux下编译它时,目标文件中的ff_dcadsp_init_arm()中没有函数,而它在windows下呢? 所以我想确定编译器是否会对无用的代码做些什么,以及如何为INTEL编译器设置它。

    通常,大多数编译器都能够处理那种代码,从而有效地删除了特定的指令/块。 但是,AFAIK不保证可能在编译器和/或提供的优化级别设置之间有所不同。

    但是,如果您希望在预处理状态下处理它(应该是更好的方法,恕我直言,因为ARCH_ARM是MACRO),您可以使用#if预处理器语句来消除对编译器优化级别的依赖性。

    例如,一般而言

     void ff_dcadsp_init(DCADSPContext *s) { //something common code #if ARCH_ARM //this {#if...#endif} block ff_dcadsp_init_arm(s); //only get compiled if ARCH_ARM evaluates to non-zero #endif //something more common code } 

    如果ARCH_ARM是一个宏,你可能会更喜欢这样的东西:

     void ff_dcadsp_init(DCADSPContext *s) { s->lfe_fir = dca_lfe_fir_c; #if ARCH_ARM != 0 ff_dcadsp_init_arm(s); #endif } 

    那么你不必关心优化器会做什么。 C标准本身并没有强制要求删除“死”代码,这完全取决于每个实现如何实现它。

    使用#if等标准Cfunction标准规定的,因此更加便携。

      以上就是c/c++开发分享编译器是否注意像if(0)这样无用的代码?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/544615.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐