gpt4 book ai didi

c - Visual Studio 2005 中 lexapp.c 的问题

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:40 25 4
gpt4 key购买 nike

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

  1. 项目在 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 = 标准输入; yyout = stdout;

  5. 代码现在可以很好地编译和构建。

  6. 调试发现它似乎在 lexapp.c 中进入一个无休止的 while 循环。

相同的代码在 Visual Studio 6 中运行良好。我无法弄清楚为什么我声明 yyinyyout 的方式会导致问题。是否有可能获得一个与 Visual Studio 2005 兼容的 lexapp.c 文件,因为我相信我在第 4 步中所做的更改导致了问题。非常感谢你们在这里的任何意见。但是,我是 lex 和 yacc 的新手。

问候,

最佳答案

VC++中的“编译为C”相当于gcc中的“-std=C89”,其中gcc通常编译为GNU99(C99扩展)。当前的 C 标准是 C11。 VC++ 的“编译为 C”缺少 C99 和 C11 添加的功能。当配置为“编译为 C”时,我会将其视为过时的 C 编译器,或者当配置为“编译为 C++”时,我会将其视为最新的 C++ 编译器。这解释了为什么用 gcc 编译的代码可能不能用 MSVC++ 编译。我建议原始代码使用了 MSVC++ 的 C89 支持中没有的 C99 功能。

解决方案是将 C99 代码转换为等效的 C89 代码,您似乎已经这样做(或开始这样做),或者使用 C99/C11 编译器(例如 gcc)编译它。

关于c - Visual Studio 2005 中 lexapp.c 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15570328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com