0

パラメータを使用すると、エラーが発生するたびに gcc が「-Wfatal-errors によりコンパイルが終了しました」と出力されます。

しかし、それは続けています。実際には止まりません。

私が使う:

g++ (x86_64-win32-seh-rev1, Built by MinGW-W64 project) 4.9.2

コンパイラの呼び出し:

@echo off
set LIBRARY_PATH=D:\Projekte\C++\Arsenal of Democracy\sdk\Lib;C:\Program Files (x86)\Microsoft DirectX SDK (August 2008)\Lib\x86
set CPLUS_INCLUDE_PATH=D:\Projekte\C++\Arsenal of Democracy\sdk\Include;C:\Program Files (x86)\Microsoft DirectX SDK (August 2008)\Include

cd src
g++ -m32 -mwindows -w -Wfatal-errors -std=c++14 -o ../AODGame.exe *.cpp
cd ..

コンパイル時間は、パラメーターなしとほぼ同じです。エラーの数も同じです。

ただし、最小限の例を作成すると:

int main()
{
  cout << "Bla." << endl; // 1st error - should abort here
  t - q = v;              // 2nd error - should not reach nor report
}

そしてそれをコンパイルします

g++ -Wfatal-errors -o Test Test.cpp

その後、動作し、2 番目のエラーは表示されません (パラメーターなしで表示されます)

この不規則性の原因は何でしょうか? どうすれば回避できますか?

明らかに、小さな例のコンパイルが中止されるかどうかは気にしませんが、実際のプロジェクトでは、節約された時間は実際に価値があります。

この問題を検索したところ、同じパラメーター (Clang で動作しない、gcc 3.x に含まれていないなど) に関するさまざまな問題に関する ~2 年前のトピックしか見つかりませんでした。

--

@David Macekのコメントに従うために、同じタイプの最初のエラーを持つ最小限の例は次のとおりです

#include <vector>

using namespace std;

template<class X> void test(vector<X> & v)
{
  vector<X>::iterator i = v.begin();
}

int main()
{
  t - v = q;
}

これも、最初のエラーの後で正しく終了し、main の式に到達することはありません。

4

0 に答える 0