2016-04-29 9 views
0

私の単一ヘッダライブラリをVC++ 6に移植しています。VC++ 6のプリプロセッサの問題

ただし、1つのマクロは展開後にエラーが発生します。

C:\Program Files (x86)\Microsoft Visual Studio\VC98\Bin\VCVARS32.BATを実行した後、コマンドラインからcl.exeを呼び出してmain.cppをコンパイルしようとしました。私はまた、/EPでプリプロセッサの出力を見て、それは正常に見えた。

空のコンソールwin32アプリケーションを作成し、私のヘッダーを含む単一の.cppファイルを追加しました。私はプロジェクトにオプションを追加していません。なぜなら、Windows 7ではうまく動かないため、一部のダイアログでIDEがクラッシュするからです。

同じ.cppファイルはmingwとgccでコンパイルできます何か - そのシンプルなポータブルコード。

関連するコードはこれです:

#define DOCTEST_STR_CONCAT_IMPL(s1, s2) s1##s2 
#define DOCTEST_STR_CONCAT(s1, s2) DOCTEST_STR_CONCAT_IMPL(s1, s2) 
#define DOCTEST_ANONYMOUS(x) DOCTEST_STR_CONCAT(x, __LINE__) 

#define DOCTEST_SUBCASE(name)                  \ 
    if(const doctest::detail::Subcase & DOCTEST_ANONYMOUS(DOCTEST_AUTOGEN_SUBCASE_) =    \ 
      doctest::detail::Subcase(name, __FILE__, __LINE__)) 

// and in main.cpp: 
void f() { 
    DOCTEST_SUBCASE("") {} 
} 

と(/EPでコマンドラインから)プリプロセッサの後、私は(罰金で、コンパイルした)これを取得:

if(const doctest::detail::Subcase & DOCTEST_AUTOGEN_SUBCASE_20 = 
    doctest::detail::Subcase("", "C:\\VC6_TESTS\\doctest\\main.cpp", 20)) {} 

エラーコンパイルするときIDE内からは次のようになります。

C:\VC6_TESTS\doctest\main.cpp(20) : error C2061: syntax error : identifier '__LINE__Var' 
C:\VC6_TESTS\doctest\main.cpp(20) : error C2072: 'DOCTEST_AUTOGEN_SUBCASE_' : initialization of a function 

IDE内のom私は悪いプリプロセッサの動作を取得している可能性があり、なぜそれはコマンドラインから動作するだろうか?または試しに何を試してみてください...

VC++ 6を使用しないように教えてください。私は18歳だとわかりますが、私のライブラリを移植することは名誉です。

EDIT:

が、これはコンパイラのバグがあることが判明。ここで問題(/ZIコマンドラインオプション)

を固定デバッグ情報からEdit and Continueをオフに

は、問題を再現する最小限のコード例です:

​​

/ZIが渡されたエラー:

c:\vc6_tests\doctest\main.cpp(19) : error C2061: syntax error : identifier '__LINE__Var' 
c:\vc6_tests\doctest\main.cpp(19) : error C2072: 'AUTOGEN_VARIABLE_' : initialization of a function 

誰もがプリプロセッサ/コンパイラを仕事に騙す方法を知っているデフォルトのプロジェクト設定のために私は感謝します。

+2

からコンパイラを使用しない以外に解決策はありませんコマンドラインで手動で渡したものを指定しています。それは恐らく問題の診断を開始する良い方法でしょう。 –

+0

@BrianFairservice聖なるたわごと!ありがとう!私は '' ''/nologo/MLd/W3/Gm/GX/ZI/Od/D "WIN32"/D "_D​​EBUG"/D "_CONSOLE"/D "_MBCS" '' 'をコマンドラインに追加しました。そこにも再生されます – onqtam

+0

私はdownvoteしませんでした。しかし助けてくれてうれしい! –

答えて

1

ビルド出力の冗長性を高め、IDEでそれを見れば、あなたはそれが最終的にcl.exeのを呼び出しているかを確認し、オプションにそれを比較します1998年

関連する問題