我有一個在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