【发布时间】:2021-02-18 09:58:26
【问题描述】:
我有一个针对 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 中所做的更改列表:
• C 编译器中添加了对 C99 指定初始值设定项的支持,例如“struct {int a, b;} c = {.a=0, .b=1};"。这也支持数组,例如 "int a[4] = {[0]=5, [3]=2};" .
请注意,我确实试图提供该文档的权威链接,但现在 openwatcom.org 已关闭(再次),我不记得该文档在该网站上的确切位置。但是,该文档包含在 OpenWatcom 1.9 的安装存档中,您仍然可以下载。例如,C 的 Windows 版本是 here。
当我尝试编译在数组初始值设定项中使用指示符的源文件时,如上所示,我只从相应的行中得到一个语法错误。我已经尝试过 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 的数组初始值设定项中使用指示符?
【问题讨论】:
-
错字缺少减号
std=c99? -
非常感谢您的提示。我在命令行上有减号,但是在将命令行复制到问题中时出错了。我现在已经更正了。
-
您是否尝试过手册中的示例?我的意思是,
=周围没有空格?有时编译器会有趣地实现“新”功能。 -
我什至怀疑它可能只适用于某些类型,或者它不喜欢我的换行符,所以我非常绝望地复制了这个例子(当然没有引号;-)) ,但无济于事:同样的结果。不过,感谢您的建议。
标签: c++ c initialization watcom