パラメータを使用すると、エラーが発生するたびに 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 の式に到達することはありません。