【问题标题】:Use stdlib functions without including stdlib.h使用不包含 stdlib.h 的 stdlib 函数
【发布时间】:2013-03-22 16:46:24
【问题描述】:

我正在编译大量使用 srand() 和 rand() 的文件,但不包括 stdlib.h。 我知道这是不好的做法,但是由于我无法更改正在编译的文件,因此不能在每个文件中插入必要的 include 语句。

如何配置我的编译器以允许隐式包含 stdlib 函数?另外,有没有办法以同样的方式隐式使用 std 命名空间?

编辑:使用 g++

编辑:看起来这是答案(至少是第一部分)。要像包含 stdlib.h 一样编译文件,请使用选项 -include stdlib.h

【问题讨论】:

  • 你可以自己声明它们,虽然我不明白你为什么要这样做。
  • 我很困惑。您正在编译文件,但不能更改它们?如果是这样,问题是什么?您不对代码负责,因此某事是否是“坏习惯”并不重要。只需编译它们。如果它们无法编译,请将它们退回给可以更改它们的人。

标签: c++ compilation std


【解决方案1】:

正如您现在提到的,您正在使用 GCC,您可以只使用 -include 标志。其他编译器可能有等价物。


如果您的编译器没有这样的标志,您可以使用以下并非完全严肃的解决方案,但它应该可以工作:

nice.cc

#include <stdlib.h>
#include "naughty.cc"

(其中 naughty.cc 是原始源文件)。

当然,使用合适的构建系统,您可以自动生成漂亮的包装文件。

【讨论】:

    【解决方案2】:

    既然你已经接受了不好的做法,那么如何:

    cat > foo.c << EOF
    #include <stdlib.h>
    #include "file-to-compile.c"
    EOF
    
    ${CC} foo.c
    

    【讨论】:

      【解决方案3】:

      您使用的是 GCC,因此您可以使用 -include 选项(来自 the manual):

      处理文件,好像#include "file" 出现在主要源文件的第一行。

      例如:

      g++ -include stdlib.h foo.c
      

      【讨论】:

        猜你喜欢
        • 2020-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-11
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        • 1970-01-01
        相关资源
        最近更新 更多