我在Visual Studio 2005中运行程序时遇到一个奇怪的问题。解释我在做什么:
在lexapp.c中出错(这是我在提供app.l文件后从Unix机器生成的C文件)
错误 - 初始化程序不是常数
FILE *yyin = {stdin}, *yyout = {stdout};
将上述代码更改为
FILE *yyin, *yyout;
并将以下代码放在yylex()
yyin = stdin; yyout = stdout;
代码编译&现在很好。
相同的代码在Visual Studio 6中运行正常。我无法弄清楚为什么我声明yyin
或yyout
的方式会导致问题。是否有可能获得一个lexapp.c文件,这是对Visual Studio 2005的抱怨,因为我相信我在步骤4中所做的更改导致了问题。非常感谢你们这里的任何意见。但是,我是lex& amp;的新手。 YACC。
问候,
答案 0 :(得分:1)
VC ++中的“Compile as C”相当于gcc中的“-std = C89”,其中gcc通常编译为GNU99(带扩展名的C99)。目前的C标准是C11。 VC ++的“编译为C”缺少C99和C11添加的功能。当配置为“编译为C”时,我将其视为过时的C编译器,或者在配置为“编译为C ++”时将其视为最新的C ++编译器。这解释了为什么用gcc编译的代码可能无法用MSVC ++编译。我建议原始代码使用C99不支持MSVC ++ C89的功能。
解决方案是将C99代码转换为它的等效C89代码,它似乎已经完成(或开始做),或者使用C99 / C11编译器(例如gcc)编译它。