通常我們寫程序,都會在一個專用的文件夾中進行,以方便管理。下面的指令在磁盤D:的根目錄上創建一個名為test的文件夾,然後把“當前目錄”(Current Directory)轉到其中:
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
在這個目錄中,用任何文本文件編輯器,比如記事本,編寫一個C/C++程序並存盤,如下圖:
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
編譯這個程序:
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
編譯參數/MD是告訴編譯器,生成的程序與msvcrt.lib鏈接,這相當於是release版本,生成的可執行程序是不帶調試信息的,無法使用Debugger調試器對這樣的程序進行跟蹤和調試。如果要使用debug版本,則參數為/MDd。留意這個畫面,我們雖然鍵入的指令是啟動cl編譯程序,但事實上,它運行了兩個程序,前面針對hello.c的部分,叫“編譯”(Compile,所謂的編譯器,實際上僅僅是這個Compiler),這是把hello.c源代碼文件編譯為目標代碼文件hello.obj的,後者用於後續的鏈接過程;後面的部分,就是“鏈接”(Link,其程序叫鏈接器Linker,可以單獨啟動,即可以僅編譯不鏈接,也可以僅鏈接不編譯),正如我們所看到的,由於我們鍵入編譯指令時沒有指定可執行程序文件的名稱,所以編譯器默認輸出為hello.exe,此處使用的鏈接輸入文件就是前面編譯部分的輸出hello.obj。hello.obj屬於中轉文件,生成程序之後,是沒有用的,我們祗要保留hello.c和hello.exe即可。
生成的文件清單如下:
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
在這裡可以看到,雖然我們編寫的源代碼文件僅有91字節,但最終機器執行程序的實際代碼大小是8K字節。所以不要以為自己寫得短,機器所要做的事情就少,那不是由你控制的,別把精力花費在縮短源代碼的字節數和行數上,那是沒用的,程序效率不體現在源代碼的緊湊上。放大了的字節數,其實是因為我們使用了printf()函數,它的可執行機器碼被從標準庫msvcrt.lib中抽出來,嵌入到.exe中了——這基本上就是printf()函數的真實大小,大約5K左右,是非常龐大而複雜的一個函數。
這裡hello.exe就是我們所要的可執行文件,運行之:
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
程序運行之後,仍然處於工作臺上,無需使用諸如getchar()之類的語句去暫停程序,那是在IDE環境中的特殊需要,正常寫程序是不用的。那麼為什麼在IDE環境中需要呢?那僅僅是Visual Studio才這樣嗎?做一個實驗就知道了:打開資源管理器,轉到.exe所在程序的文件夾中,雙擊它,現象就是一閃即逝。這就是答案,在IDE中也是這般運行程序的。
[
本帖最后由 TonyDeng 于 2015-10-5 15:06 编辑 ]