我有一个在Visual Studio 2005中运行的程序解释我在做什么一个奇怪的问题:问题与lexapp.c在Visual Studio 2005
- 项目是在Visual Studio 6
- 转换的项目来Visual Studio 2005中
得到了在lexapp.c错误(这是后我给它的app.l文件从Unix机器生成的C文件)
错误 - 初始化程序不是一个常数
FILE *yyin = {stdin}, *yyout = {stdout};
改变了上面的代码
FILE *yyin, *yyout;
,并把下面的代码在
yylex()
yyin = stdin; yyout = stdout;
代码编译&现在建立的罚款。
- 调试发现它似乎在lexapp.c内部的无尽while循环中。
相同的代码工作在Visual Studio 6罚款我无法弄清楚,为什么在我宣布yyin
或yyout
的方式会导致一个问题。是否有可能获得Visual Studio 2005投诉的lexapp.c文件,因为我相信我在第4步中更改了这个问题。希望你们在这里提出任何意见。不过,我是新来的yacc lex &。
问候,
stdin的类型是'FILE *',因此'{stdin}'的类型是'FILE * [1]'。这个'FILE * [1]'将被默默地转换为C中的'FILE **'。你不应该在一个存储'FILE *'值的变量中存储'FILE **'值。事实上,一个C++编译器(顺便说一下,你正在使用它)会在C编译器不在这种情况下发出错误。你为什么使用C++编译器来编译C代码? – Sebivor 2013-03-22 12:41:34
用C编译器和C++代码用C++编译器编译C代码,使用C++链接器将C代码链接到C++项目,您不会遇到任何问题。用C++编译器编译C代码会出现许多问题。 – Sebivor 2013-03-22 12:43:38
我已经设置了编译器选项,将它编译为C代码。这没有什么区别?所有我想要做的就是使用Visual Studio 2005或更高版本调试代码,而不必将打印语句全部放在上面。 – 2013-03-22 17:14:03