我有一个针对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 Version 1.3的差异
以下是Open Watcom C/c++ 1.4中所做的更改列表:
•C编译器中增加了对C99指定初始化式的支持,例如"struct {int a;} c = {;= 0,。b = 1};"。这也支持数组,例如"int a[4] = {[0]=5, [3]=2};"
请注意,我确实试图提供一个权威的链接到该文件,但现在openwatcom.org(再次)关闭,我不记得该文件在该网站上的确切位置。但是,该文档包含在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=objReleasefoo.obj foo.cpp
wpp.exe -6 -bt=DOS -d3 -e20 -ef -ei -er -fpi87 -fp5 -mh -od -wx -zdf -zff -zgf -zt256 -zu -fo=objReleasefoo.obj foo.cpp
那么我要做什么才能在OpenWatcom C/c++ 1.9的数组初始化器中使用指示符?
你可以使用Open Watcom编译器fork来编译代码(参见option -za99) -
#include <stdio.h>
int main() {
double foo[2] = {[0] = 1.5, [1] = 0.5};
printf("foo => {%f, %f}n", foo[0], foo[1]);
return 0;
}
输出——
Open Watcom C/C++ x86 32-bit Compile and Link Utility
Version 2.0 beta Dec 31 2020 01:11:17 (64-bit)
Copyright (c) 2002-2020 The Open Watcom Contributors. All Rights Reserved.
Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
wcc386 st.c
Open Watcom C x86 32-bit Optimizing Compiler
Version 2.0 beta Dec 31 2020 00:56:05 (64-bit)
Copyright (c) 2002-2020 The Open Watcom Contributors. All Rights Reserved.
Portions Copyright (c) 1984-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
st.c: 9 lines, included 799, 0 warnings, 0 errors
Code size: 89
wlink @__wcl__.lnk
Open Watcom Linker Version 2.0 beta Dec 31 2020 00:49:52 (64-bit)
Copyright (c) 2002-2020 The Open Watcom Contributors. All Rights Reserved.
Portions Copyright (c) 1985-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
loading object files
searching libraries
creating a Windows NT character-mode executable