1

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

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

编辑:使用 g++

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

4

3 回答 3

2

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


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

不错的.cc

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

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

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

于 2013-03-22T16:49:23.313 回答
1

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

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

${CC} foo.c
于 2013-03-22T16:49:43.080 回答
1

您正在使用 GCC,因此您可以使用该-include选项(来自手册):

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

例如:

g++ -include stdlib.h foo.c
于 2013-03-22T16:54:13.507 回答