私は DOS を対象とする古いプロジェクトを持っています (そうです、本当に)。これを更新して再コンパイルする必要があります。このプロジェクトは、Open Watcom 1.9 C / C++ コンパイラと JWasm アセンブラを使用しています。そのプロジェクトにはそれらに固有のコードがたくさん含まれているため、他のコンパイラやアセンブラを使用することはできません。
機能するもの:
既存のコードに問題なく、プロジェクトをそのままコンパイルおよびリンクできます。コードを変更し、プロジェクトを再コンパイルしてリンクできます。
私の問題:
コードの更新と改善をしながら、C99構文/拡張構文の一部を使用したいと考えています。特に、次のような配列初期化子で指定子を使用したいと思います。
double foo[2] = {
[0] = 1.5,
[1] = 0.5
};
gcc だけがその構文をサポートしていることをどこかで読んだことがありますが (どこか思い出せません)、Open Watcom 1.9 のマニュアルでは反対のことが述べられています。c_readme.pdf
、第6.5章、46ページから:
6.5 Open Watcom バージョン 1.3 との相違点
以下は、Open Watcom C/C++ 1.4 で行われた変更のリストです。
• C99 指定初期化子のサポートが C コンパイラに追加されました。 .a=0, .b=1};". これは、「int a[4] = {[0]=5, [3]=2};」などの配列でもサポートされています。
私は実際にそのドキュメントへの信頼できるリンクを提供しようとしましたが、現在 openwatcom.org は (再び) ダウンしており、その Web サイト上のドキュメントの正確な場所を思い出せないことに注意してください。ただし、ドキュメントは OpenWatcom 1.9 のインストール アーカイブに含まれており、引き続きダウンロードできます。たとえば、C の Windows バージョンはこちらです。
上記のように、配列初期化子で指定子を使用するソース ファイルをコンパイルしようとすると、それぞれの行から構文エラーが発生します。POSIX コンパイラ ドライバと通常の C コンパイラを試しましたが、どちらも同じ構文エラーを生成します。これらは私が使用したコマンドラインです:
owcc.exe -c -v -mtune=686 -g3f -Wstop-after-errors=20 -fmessage-full-path -fno-short-enum -fptune=586 -mcmodel=h -O0 -finline-math -Wextra -std=c99 -b DOS -fo=obj\Release\foo.obj foo.cpp
wpp.exe -6 -bt=DOS -d3 -e20 -ef -ei -er -fpi87 -fp5 -mh -od -wx -zdf -zff -zgf -zt256 -zu -fo=obj\Release\foo.obj foo.cpp
では、OpenWatcom C/C++ 1.9 の配列イニシャライザで指定子を使用できるようにするには、どうすればよいでしょうか?