A. Lex生成的源文件 導入到vc++中 產生的 編譯問題
我查了一下, 感覺是不是你在VC++里一些設置步驟還沒做?
在安裝了Parser Generator後,執行以下步驟,即可使VC++編譯和連接由Parser
Generator產生的文件。
1.目錄設置
在VC++中執行以下步驟,每個步驟只執行一次。
(1) 選擇Tools菜單中的Options命令,在屏幕上即會出現Options對話框。
(2) 選擇Directories選項卡。
(3) 在Show Directories for下拉列表框中選擇Include Files。
(4) 在Directories框中,點擊最後的空目錄,並填入Parser Generator的include
子目錄的路徑。
(5) 在Show Directories for下拉列表框中選擇Library Files。
(6) 在Directories框中,點擊最後的空目錄,並填入Parser Generator的
lib\msdev子目錄的路徑。
(7) 在Show Directories for下拉列表框中選擇Source Files。
(8) 在Directories框中,點擊最後的空目錄,並填入Parser Generator的Source
子目錄的路徑。
(9) 點擊OK按鈕,Options對話框將接受設置並關閉。
VC++在就可以找到包含文件yacc.h和lex.h以及YACC和Lex的庫文件。
2.項目設置
對於每個VC++項目,都需在VC++中執行以下步驟:
(1) 選擇Project菜單中的Settings命令,在屏幕上即會出現Project Settings對
話框。
(2) 在Settings for下拉列表框中選擇Win32 Debug。
(3) 選擇C/C++標簽。
(4) 在Category下拉列表框中選擇General。
(5) 在Preprocessor Definitions框中,在當前文本的最後,輸入YYDEBUG。
(6) 選擇Link標簽。
(7) 在Category下拉列表框中選擇General。
(8) 在Object/Library Moles框中,在當前文本的後面,輸入yld.lib //這里好象實際使用中不包括後面兩個庫
ylmtd.lib ylmtdlld.lib。
(9) 在Settings for下拉列表框中選擇Win32 Release。
(10) 重復第8步的工作。
(11) 點擊OK按鈕,Project Settings對話框將接受設置並關閉。
VC++現在可以從特定的庫中接受YACC和Lex所需的函數和變數。
3.應用
(1)在Parser Generator下的編輯窗口輸入YACC源程序(擴展名必須為.y)。
(2)用Parser Generator下的Project菜單的Compile file命令編譯源程序,生成相應的C
語言源程序(.cpp)。
(3)用VC++編譯,連接C語言源程序,生成可執行程序(.exe)後即可執行。
B. 用VS編譯C 出現一個警告 什麼意思啊
警告 2 warning C4013: 「getch」未定義;假設外部返回 int d:\文件類\c語言\c 語言項目\c\c\2.c 12 C源代碼是# include <stdio.h
void main(){int a[10];int i;for(i=0;i<10;i++){scanf("%d",&a[i]);}a[5]=a[5]+5;
printf("%d",a[5]);getch();}回答:很多涉及字元串的函數是不檢查越界的, 不安全。 所以後來有一套新的安全函數替代這個, 第一個warning就是建議你用 scanf_s代替scanf 第二個 warning是說你用的 getch()沒定義, 所以編譯器假定它是 int getch(void)。 用的函數最好先 include好頭文件
warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS
已經是安全主導的年代了,這些老舊的東西微軟提供了一些新函式來取代,很簡單他在後面加了_s ,例如gets == gets_s ,strcpy == strcpy_s原因解釋這種微軟的警告,主要因為那些C庫的函數,很多函數內部是不進行參數檢測的(包括越界類的),微軟擔心使用這些會造成內存異常,所以就改寫了同樣功能的函數,改寫了的函數進行了參數的檢測,使用這些新的函數會更安全和便捷。關於這些改寫的函數你不用專門去記憶,因為編譯器對於每個函數在給出警告時,都會告訴你相應的安全函數,查看警告信息就可以獲知,在使用時也再查看一下MSDN詳細了解。庫函數改寫例子:
mkdir改寫為 _mkdir
fopen」改寫為 fopen_s
stricmp改寫為 stricmp_s
strcpy改寫為strcpy_s解決方案:1 根據下面的warning提示:參見「fopen」的聲明
消息:「This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.」
所以可以將函數按warning提示的第二句,改為使用fopen_s函數即可:
例如:FILE *pFile=fopen("1.txt", "w");改為:FILE* pFile;
fopen_s(&pFile, "1.txt", "w");
2 還是根據warning提示的地三句話:use _CRT_SECURE_NO_DEPRECATE
項目|屬性|配置屬性|C/C++|命令行|附加選項,加入【/D "_CRT_SECURE_NO_DEPRECATE" 】(註:加入中括弧中完整的內容)
3 降低警告級別:項目|屬性|配置屬性|C/C++|常規,自己根據情況降低警告級別(此法不推薦)
注意:高度重視警告:使用編譯器的最高警告級別。應該要求構建是干凈利落的(沒有警告)。理解所有警告。通過 修改代碼而不是降低警告級別來排除警告。
編譯器是你的朋友。如果它對某個構造發出警告,這經常是說明你的代碼中存在潛在的問題。成功的構建應該是無聲無息的(沒有警告的)。【《
C. 用vs編譯C++文件時無法啟動程序,並且找不到指定文件怎麼辦
1、用 VS 打開工程,點擊菜單 項目 - 屬性。
D. UE如何調用VS編譯C\C++
UE配置VS稍微麻煩一點,主要是VS自身對命令編譯的支持不夠直接,需要先運行它自己的批處理設置環境變數。以VS 10的vc 2010為例,配置UE。
1. 菜單Advanced-> Tool Configuration....
2. 點擊Insert,然後Menu Item name裡面填寫VC(可自己修改);work directory填寫%p;command line是關鍵,填寫:
C:Progra~2Micros~2.0VCinvcvars32.bat && C:Progra~2Micros~2.0VCincl "%f"
說明: C:Progra~2Micros~2.0是我電腦裡面vc 2010的目錄的」短文件「名顯示,它的具體名稱各個電腦會不同,比如:C:Program Files (x86)Microsoft Visual Studio 10.0VCin
關鍵是找到vcbars32.bat和cl.exe的位置,----- 進入命令行,從C:盤起,用下面的命令羅列目錄名稱:
c:>dir/ad/x
每發現一個,用」cd 短目錄名稱「進入,然後重復上面的dir命令,直到找到visual studio里的bin目錄位置.
3. 選擇option,選擇output to list box和capture output兩項,然後OK保存退出。
4.編輯源碼,然後再從Advanced從選擇步驟2裡面填寫的VC菜單項,點擊運行,就可編譯了。
UE的編譯環境沒有其同門UEStudio來的方便,如果有興趣,參見網路知道的問題519730341408692205, 那個也我對UEStudio下VC設置的回答。
如果是學習C/C++語言也就罷了,否則VC下的開發,還是用VS自己的IDE或命令行環境吧。
E. 怎麼用vs.net編譯cs文件
編譯 File.cs 以產生 File.exe:
csc File.cs
編譯 File.cs 以產生 File.dll:
csc /target:library File.cs
編譯 File.cs 並創建 My.exe:
csc /out:My.exe File.cs
F. 用VS編譯和C++源文件的時候,源文件和庫文件是如何鏈接到源文件的具體細節
因為我是學習計算機軟體專業的,故可以給你講一下大概意思,我也不敢保證我講得都是正確的。個人講解僅供參考。這個是需要學習《計算機編譯原理》這門課程的。而且《計算機編譯原理》這門課程在軟體專業中幾乎是最抽象的、難於理解的。
首先關於 Visual Studio編譯器(或者是別的 C/C++編譯器)是如何將用戶親自編寫的源程序經過若干步驟之後,最終變成計算機可執行的二進制代碼程序?這裡面經過了如下步驟:
(1)、詞法分析/語法分析。也就是說當編譯器對用戶編寫的源程序進行編譯時,首先檢查你的詞法(或者是語法)是否正確,這是第一步(這里以 C 語言為例,假如將定義一個整型變數 n 的語句 int n ; 誤寫成了:intt n ; 屬於語法錯誤)。如果這一步都沒有通過編譯器的檢查的話,那麼絕對不會進入第二步。繼續返回編輯狀態進行語法檢查。這種錯誤是最容易檢查的。
(2)、語義分析。這類錯誤就要比(1)困難得多。這類錯誤舉例如下(這類錯誤編譯器只是會給出一個警告信息,但是編譯器是會放過這類錯誤的。故需要編程人員具有較豐富的編程經驗)
void main( )
{
int num ; /* 定義一個整型變數 num */
scanf("%d", &num ) ; /* 從鍵盤上輸入一個整數 */
if( num == 10 ) /* 在這個語句中,如果將邏輯判斷等於號 ==,誤寫為數值等於 =(即:if( num = 10 )),那麼該程序的執行結果始終輸出:Correct。因為該邏輯表達式 if( 10 ) 的真值始終為 1。 */
printf( "Correct !\n" ) ; /* 實際上程序的本意是:如果輸入的數值等於 10,則輸出:Correct ! */
else /* 如果輸入的數值不等於 10 的話,則輸出:Error ! */
printf( "Error !\n" ) ;
}
(3)、在(1)和(2)的基礎上進行中間代碼生成(例如:在Linux 系統下面生成的 *.o 文件、或者是在 WINDOWS 系統下面生成的 *.obj 文件),這類文件還不是最終的可執行文件。
在此過程中,會應用到各種符號表,以便處理用戶程序中使用的各種常量、變數、以及各種函數,等等。
(4)、在前三個階段的基礎上,最終 VS 編譯器再將中間代碼(*.obj 文件)和其本身提供的庫文件(*.LIB)進行鏈接,最終產生可執行程序(Linux 系統使用的編譯器是:gcc,Linux 系統下面的可執行文件名可以任意,WINDOWS 系統下面的可執行文件名為:*.EXE 文件)。
到此為止,一個用戶編寫的源程序,經過上面若干步驟之後,最終產生了可執行程序,此時就可以在機器上的相應的操作系統上執行了。
G. 為什麼用vs編譯出來的exe文件不能在電腦上運行
vs2010編譯出來的程序默認是debug模式是要用到系統以外的msvcr100d.ll,這個文件在沒有裝vs或vs運行庫的電腦里一般沒有,release模式默認要用到系統外的msvcr100.dll,這個文件也是一般電腦上沒有,你最好把相應的dll放在同一個文件夾中傳過去,以便正常運行。還有,如果你直接傳exe文件,QQ會把這個exe文件重命名成「**.exe.重命名文件」,也就是exe文件到對方那裡成了".重命名"文件,結果對方電腦找不到相關聯的程序,所以提示不知道用什麼打開程序,你可以讓他再重命名成exe文件,要麼你把exe文件放在一個文件夾裡面,然後把文件夾傳過去,文件夾裡面的exe文件是不會重命名的成「.重命名」文件的,只有直接傳exe文件時才會被替換成重命名文件。
H. 用VS編譯C++程序時,在運行窗口輸入信息後,按下回車運行窗口在顯示運行結果後立馬窗口跳沒應如何處理
在程序最末端添加系統暫停語句,如system("PAUSE") 注意要包含#include<cstdlib>或者使用getch()之類的等待輸入的語句就行了,按任意鍵就可以退出了
I. 微軟 怎麼知道用 vs 編譯的
如何使用Visual Studio 2010(VS2010)編譯C語言
1.打開VS2010主界面,然後選擇,文件→新建→項目,在項目類型中選擇VC++→win32 然後在右側模板中選擇win32控制台應用程序,再在下面輸入一個名稱(項目名稱,不用帶.C)
選擇保存位置後確定,彈出個對話框,不管它,下一步.
2.接下來注意了,這個對話框中,應用程序類型要選擇控制台應用程序,附加選項一定要選中「空項目」。然後點完成。然後對話框消失.
3.回到VS主界面,這時會在左側和右側多了如圖工具欄「解決方案管理器」,在源文件上點右鍵,選擇「添加→新建項」。這里注意,如果你已經有寫好的C源文件,那麼要選擇「現有項」
4.又打開個對話框,不管左邊的,在右邊的模板中選擇C++文件(注一),在下面的名稱中輸入源文件的名字加上.C(注二),保存位置用默認的。然後點擊「添加」
5.好了,編輯頁面出來了,大家可以寫代碼了,這里就寫所有程序員無論學什麼語言都要寫的一個程序「hello world」吧^_^
這里可以看到,VS2010可以智能的標示出函數參數和函數體,方便查看和修改。比VC6.0方便多了。
tips:system(「pause」)(需頭文件windows.h)的目的是讓程序執行到這個位置的時候「暫停」,讓操作者能看到結果。
編好了,然後選擇 調試,或者直接點綠色小箭頭按鈕(注三)就可以查看程序運行結果了,最後,別忘了保存.
好了,介紹完了,相信大家也都掌握了在VS2010下編譯C的方法,這樣裝了VS2010的同學也就不用再費事裝VC6.0了,VS很好很強大,其他的功能大家自己慢慢摸索吧,呵呵,不說啦。
注釋:
注一:現在已經基本沒有純粹的C編譯環境了,都是用兼容C的C++編譯工具來編譯C,所以創建的模板是C++模板。(大家一定還記得VC6.0中大家新建的文件也是C++SourceFile(C++源文件)吧)
注二:加上.C後,編譯系統就會知道這個是C源,從而創建的是C的源文件,編譯的時候就會調用C編譯器。而不加.C,創建的就是C++的源文件。編譯的時候會調用C++的編譯器。雖然C++兼容C,但是在不同的C++編譯環境對C的支持度是不同的,就比如本文中的例子,那句system函數就是C專有的,如果採用C++來編譯就會出錯。所以,在不確定所用的C++編譯器是不是支持某種C語法的時候,還是老老實實的記得加上.C,來告訴編譯系統使用C編譯器而不是C++。
注三:綠色小箭頭的意思是「調試」,快捷鍵F5,使用的時候會吧程序從頭執行到尾,然後自動退出,如果你的程序沒有暫停語句的話,就會出現黑色的程序窗口一閃而過的情況。
如果不想讓程序在調試完畢後自動退出,最簡便的方法就是選擇菜單中的「調試→開始執行」或者按快捷鍵ctrl+F5
J. 用VS2010怎麼編譯,調試,運行Vc++文件
以HelloWorld為例 打開VS2010 文件->新建->項目-> 左邊安裝的模版中,選中Visual C++ 中間選擇Win32控制台應用程序,輸入項目名稱 點擊確定->下一步->完成,或者直接點完成 VS2010寫了一些代碼,可以刪掉,然後自己寫 #include"stdafx.h" //這個在VS2010得寫上 #include<iostream> using namespace std; void main() { cout<<"HelloWord"; } 運行的時候,菜單欄->調試->開始執行(不調試),這樣程序會在結尾處停止 如果選啟動調試,程序就會直接執行完,看不到結果 編譯,就是菜單欄->生成->生成解決方案,或者第四項:生成+(項目名稱),或者最後一項,編譯 都是同樣的效果.