私の単一ヘッダライブラリを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
誰もがプリプロセッサ/コンパイラを仕事に騙す方法を知っているデフォルトのプロジェクト設定のために私は感謝します。
からコンパイラを使用しない以外に解決策はありませんコマンドラインで手動で渡したものを指定しています。それは恐らく問題の診断を開始する良い方法でしょう。 –
@BrianFairservice聖なるたわごと!ありがとう!私は '' ''/nologo/MLd/W3/Gm/GX/ZI/Od/D "WIN32"/D "_DEBUG"/D "_CONSOLE"/D "_MBCS" '' 'をコマンドラインに追加しました。そこにも再生されます – onqtam
私はdownvoteしませんでした。しかし助けてくれてうれしい! –