Visual Studio 2005中lexapp.c的问题

时间:2013-03-22 12:28:49

标签: c visual-studio-2005 lex

我在Visual Studio 2005中运行程序时遇到一个奇怪的问题。解释我在做什么:

  1. Project在Visual Studio 6中
  2. 将项目转换为Visual Studio 2005
  3. 在lexapp.c中出错(这是我在提供app.l文件后从Unix机器生成的C文件)

    错误 - 初始化程序不是常数

    FILE *yyin = {stdin}, *yyout = {stdout};

  4. 将上述代码更改为

    FILE *yyin, *yyout;

    并将以下代码放在yylex()

    yyin = stdin; yyout = stdout;

  5. 代码编译&现在很好。

  6. 调试以发现它似乎在lexapp.c里面进行了无休止的循环。
  7. 相同的代码在Visual Studio 6中运行正常。我无法弄清楚为什么我声明yyinyyout的方式会导致问题。是否有可能获得一个lexapp.c文件,这是对Visual Studio 2005的抱怨,因为我相信我在步骤4中所做的更改导致了问题。非常感谢你们这里的任何意见。但是,我是lex& amp;的新手。 YACC。

    问候,

1 个答案:

答案 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)编译它。