1

stdlib.h を含めずに srand() と rand() を使用する多数のファイルをコンパイルしています。これが悪い習慣であることは承知していますが、コンパイルしているファイルを変更できないため、各ファイルに必要な 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

GCCを使用しているため、-includeオプションを使用できます(マニュアルから):

#include "file" がプライマリ ソース ファイルの最初の行として表示されているかのようにファイルを処理します。

例えば:

g++ -include stdlib.h foo.c
于 2013-03-22T16:54:13.507 に答える
1

あなたはすでに悪い慣行を受け入れているので、どうですか:

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

${CC} foo.c
于 2013-03-22T16:49:43.080 に答える