如果0在C程序中编译

Shai Zarzewski

我正在尝试从程序中删除未使用的代码-我暂时无法删除该代码,我只是想一开始就将其禁用。

假设我有以下代码:

if (cond){
  doSomething()
}

并且cond总是错误的,所以doSomething永远不会被调用。

我想做类似的事情:

#define REMOVE_UNUSED_CODE 0
if (cond && REMOVE_UNUSED_CODE){
  doSomething()
}

现在,对于我们(希望对编译器而言)这是未使用的代码。

编译器将删除所有这种if情况,还是将其保留并且永远不会进入?

PS:我不能#if 0为此目的使用

留申科

GCC将显式删除具有控制它们的常量表达式的条件块,而GNU编码标准明确建议您利用此条件,而不要使用诸如依赖预处理程序之类的更粗糙的方法。尽管使用预处理器#if可能会看起来更有效,因为它可以在较早的阶段删除代码,但实际上,现代优化器在您向其提供尽可能多的信息时效果最佳(当然,如果避免添加阶段,它会使程序更简洁,更一致) -在不需要的地方分离依赖项)。

对于现代编译器而言,这样的决定非常非常容易-即使是非常简单的TCC也会执行一定数量的死代码消除。诸如LLVM和GCC之类的功能强大的系统将发现这一点,并且,作为普通读者,您可能会错过的更复杂的案例(通过跟踪寿命和变量的修改,而不仅仅是查看单个点)。

这是除了全编译等优势,喜欢的事实,内部的代码if将错误检查(而#if用于移除代码更有用的当前系统上的错误,比如不存在的平台函数的引用)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Vim中编译C ++程序

来自分类Dev

如果程序集存在,则执行C#条件编译

来自分类Dev

在C ++编译器中编译C程序

来自分类Dev

如果我使用 linux 库在 C 中编译程序,我可以在 Windows 上使用它吗?

来自分类Dev

在JNI下编译C程序中的错误

来自分类Dev

c中的mpi程序编译但不运行

来自分类Dev

错误:无法运行C编译程序。如果您打算交叉编译使用--host'Ubuntu

来自分类Dev

错误:无法运行C编译程序。如果您打算交叉编译使用--host'Ubuntu

来自分类Dev

如果不应通过root编译程序,应如何在/ usr / local中安装程序?

来自分类Dev

如果 C++ 应用程序与模板密集型库链接,那么无论何时编译应用程序,它是否都会重新编译库中的所有模板定义?

来自分类Dev

在bash脚本中编译和执行c程序不起作用,因为找不到编译的程序

来自分类Dev

编译C程序的麻烦

来自分类Dev

编译继承程序C ++

来自分类Dev

无法编译C程序

来自分类Dev

错误编译C程序

来自分类Dev

C ++程序无法编译

来自分类Dev

从Java程序编译C程序

来自分类Dev

使用共享库在Linux中编译C程序

来自分类Dev

C ++程序中的输出编译器版本

来自分类Dev

使用代码运行器在VS代码中编译C程序

来自分类Dev

如何在Visual Studio Code中编译C程序?

来自分类Dev

在Mac OS X中编译使用OpenGl的C程序

来自分类Dev

如何编译在Vi或Vim中编辑过的C程序?

来自分类Dev

我的kali linux中未编译C程序

来自分类Dev

加速的C ++:编译第4章中的程序

来自分类Dev

如何在Ubuntu 18.04中编译C程序文件

来自分类Dev

C ++程序在Visual Studio 2010中编译,但不能在Mingw中编译

来自分类Dev

在java中,如果 “字符C = 'A'” 为什么 “C = C + 1” 不能编译?

来自分类Dev

使用g ++编译器在Visual Studio中编译C ++程序会在最后生成%

Related 相关文章

  1. 1

    在Vim中编译C ++程序

  2. 2

    如果程序集存在,则执行C#条件编译

  3. 3

    在C ++编译器中编译C程序

  4. 4

    如果我使用 linux 库在 C 中编译程序,我可以在 Windows 上使用它吗?

  5. 5

    在JNI下编译C程序中的错误

  6. 6

    c中的mpi程序编译但不运行

  7. 7

    错误:无法运行C编译程序。如果您打算交叉编译使用--host'Ubuntu

  8. 8

    错误:无法运行C编译程序。如果您打算交叉编译使用--host'Ubuntu

  9. 9

    如果不应通过root编译程序,应如何在/ usr / local中安装程序?

  10. 10

    如果 C++ 应用程序与模板密集型库链接,那么无论何时编译应用程序,它是否都会重新编译库中的所有模板定义?

  11. 11

    在bash脚本中编译和执行c程序不起作用,因为找不到编译的程序

  12. 12

    编译C程序的麻烦

  13. 13

    编译继承程序C ++

  14. 14

    无法编译C程序

  15. 15

    错误编译C程序

  16. 16

    C ++程序无法编译

  17. 17

    从Java程序编译C程序

  18. 18

    使用共享库在Linux中编译C程序

  19. 19

    C ++程序中的输出编译器版本

  20. 20

    使用代码运行器在VS代码中编译C程序

  21. 21

    如何在Visual Studio Code中编译C程序?

  22. 22

    在Mac OS X中编译使用OpenGl的C程序

  23. 23

    如何编译在Vi或Vim中编辑过的C程序?

  24. 24

    我的kali linux中未编译C程序

  25. 25

    加速的C ++:编译第4章中的程序

  26. 26

    如何在Ubuntu 18.04中编译C程序文件

  27. 27

    C ++程序在Visual Studio 2010中编译,但不能在Mingw中编译

  28. 28

    在java中,如果 “字符C = 'A'” 为什么 “C = C + 1” 不能编译?

  29. 29

    使用g ++编译器在Visual Studio中编译C ++程序会在最后生成%

热门标签

归档