我正在编译大量使用 srand() 和 rand() 的文件,但不包括 stdlib.h。我知道这是不好的做法,但是由于我无法更改正在编译的文件,因此不能在每个文件中插入必要的 include 语句。
如何配置我的编译器以允许隐式包含 stdlib 函数?另外,有没有办法以同样的方式隐式使用 std 命名空间?
编辑:使用 g++
编辑:看起来这是答案(至少是第一部分)。要像包含 stdlib.h 一样编译文件,请使用选项 -include stdlib.h
我正在编译大量使用 srand() 和 rand() 的文件,但不包括 stdlib.h。我知道这是不好的做法,但是由于我无法更改正在编译的文件,因此不能在每个文件中插入必要的 include 语句。
如何配置我的编译器以允许隐式包含 stdlib 函数?另外,有没有办法以同样的方式隐式使用 std 命名空间?
编辑:使用 g++
编辑:看起来这是答案(至少是第一部分)。要像包含 stdlib.h 一样编译文件,请使用选项 -include stdlib.h
正如您现在提到的,您正在使用 GCC,您可以只使用该-include
标志。其他编译器可能有等价物。
如果您的编译器没有这样的标志,您可以使用以下并非完全严肃的解决方案,但它应该可以工作:
不错的.cc
#include <stdlib.h>
#include "naughty.cc"
(其中 naughty.cc 是原始源文件)。
当然,使用合适的构建系统,您可以自动生成漂亮的包装文件。
既然您已经接受了不好的做法,那么如何:
cat > foo.c << EOF
#include <stdlib.h>
#include "file-to-compile.c"
EOF
${CC} foo.c
您正在使用 GCC,因此您可以使用该-include
选项(来自手册):
处理文件,好像#include "file" 出现在主要源文件的第一行。
例如:
g++ -include stdlib.h foo.c