1. 程式人生 > >2018-10-16 22:56:13 c language

2018-10-16 22:56:13 c language

free main函數 工作 xxx 了解 完成後 不同的 std 如果

2018-10-16 22:56:13 c language

我們把上面的步驟總結一下,可以發現一個完整的編程過程是:

  1. 編寫源文件:這是編程的主要工作,我們要保證代碼的語法 100% 正確,不能有任何差錯;
  2. 編譯:將源文件轉換為目標文件;
  3. 鏈接:將目標文件和系統庫組合在一起,轉換為可執行文件;
  4. 運行:可以檢驗代碼的正確性。
制作安裝包,讓用戶安裝程序
  1. 程序安裝原理分析:1) 將程序的可執行文件從安裝包所在的位置,拷貝到要安裝的目錄。

    安裝程序的時候,程序會給用戶指定一個默認的安裝目錄,如果用戶需要,也可以自定義安裝,改變安裝目錄。一般所謂的“綠色軟件”到此就安裝結束了,可以使用了。

    2) 如果有必要,可以向系統目錄拷貝一些動態鏈接庫(DLL)。(可選操作)

    有的程序,比如大型遊戲,可能需要很多動態鏈接庫(DLL)的支持,這時候程序可能會將這些DLL拷貝到系統庫的默認目錄,Win7下一般拷貝到 C:\\Windows\System32\(讀者不妨打開該目錄,會看到很多 DLL 文件)。

    有些程序用到的DLL文件不是系統必需的,只能由程序自己使用,這樣放在系統目錄裏就不太合適,安裝的軟件多了,就會造成系統臃腫,所以這些DLL會被拷貝到程序的安裝目錄。

    3) 向系統註冊表中寫入相應的設置項,註冊程序或者庫的安裝信息。(可選操作)

    安裝前,用戶可能會對軟件做一些設置,安裝時,這些設置就會被寫入註冊表。另外,當安裝程序將DLL文件拷貝到系統目錄時,一些DLL還需要向系統註冊,告訴系統我在這裏,不然使用的時候可能會找不到。

    4) 在開始菜單或者桌面上位程序創建快捷方式。(可選操作).

分析第一個C語言程序

前面我們給出了一段最簡單的C語言代碼,並演示了如何在不同的平臺下進行編譯,這節我們來分析一下這段代碼,讓讀者有個整體的認識。代碼如下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. puts("C語言中文網");
  5. return 0;
  6. }

函數的概念

先來看第4行代碼,這行代碼會在顯示器上輸出“C語言中文網”。前面我們已經講過,puts 後面要帶( ),字符串也要放在( )中。

在C語言中,有的語句使用時不能帶括號,有的語句必須帶括號。帶括號的稱為函數(Function)。

C語言提供了很多功能,例如輸入輸出、獲得日期時間、文件操作等,我們只需要一句簡單的代碼就能夠使用。但是這些功能的底層都比較復雜,通常是軟件和硬件的結合,還要要考慮很多細節和邊界,如果將這些功能都交給程序員去完成,那將極大增加程序員的學習成本,降低編程效率。

好在C語言的開發者們為我們做了一件好事,他們已經編寫了大量代碼,將常見的基本功能都完成了,我們可以直接拿來使用。但是現在問題來了,那麽多代碼,如何從中找到自己需要的呢?一股腦將所有代碼都拿來顯然是非常不明智的。

這些代碼,早已被分門別類地放在了不同的文件中,並且每一段代碼都有唯一的名字。使用代碼時,只要在對應的名字後面加上( )

就可以。這樣的一段代碼能夠獨立地完成某個功能,一次編寫完成後可以重復使用,被稱為函數(Function)。讀者可以認為,函數就是一段可以重復使用的代碼。

函數的一個明顯特征就是使用時必須帶括號( ),必要的話,括號中還可以包含待處理的數據。例如puts("C語言中文網")就使用了一段具有輸出功能的代碼,這段代碼的名字是 puts,"C語言中文網" 是要交給這段代碼處理的數據。使用函數在編程中有專業的稱呼,叫做函數調用(Function Call)。

如果函數需要處理多個數據,那麽它們之間使用逗號,分隔,例如:

pow(10, 2);

該函數用來求10的2次方。

需要註意的是,C語言中的函數和數學中的函數不是同一個概念,不要拿兩者對比。函數的英文名稱是 Function,它還有“功能”的意思。大陸將 Function 翻譯為“函數”,而臺灣地區翻譯為“函式”,讀者要註意區分。

自定義函數和main函數

C語言自帶的函數稱為庫函數(Library Function)。庫(Library)是編程中的一個基本概念,可以簡單地認為它是一些列函數的集合,在磁盤上往往是一個文件夾。C語言自帶的庫稱為標準庫(Standard Library),其他公司或個人開發的庫稱為第三方庫(Third-Party Library)。

關於庫的概念,我們已在《為什麽你覺得C語言什麽都不能做,學了沒用》中進行了詳細介紹。

除了庫函數,我們還可以編寫自己的函數,拓展程序的功能。自己編寫的函數稱為自定義函數。自定義函數和庫函數在編寫和使用方式上完全相同,只是由不同的機構來編寫。

示例中第2~6行代碼就是我們自己編寫的一個函數。main 是函數的名字,( ) 表明這是函數定義,{ } 之間的代碼是函數要實現的功能。

函數可以接收待處理的數據,同樣可以將處理結果告訴我們;使用return可以告知處理結果。示例中第5行代碼表明,main 函數的處理結果是整數 0。return 可以翻譯為“返回”,所以函數的處理結果被稱為返回值(Return Value)。

第2行代碼中,int 是 integer 的簡寫,意為“整數”。它告訴我們,函數的返回值是整數。

需要註意的是,示例中的自定義函數必須命名為 main。C語言規定,一個程序必須有且只有一個 main 函數。main 被稱為主函數,是程序的入口函數,程序運行時從 main 函數開始,直到 main 函數結束(遇到 return 或者執行到函數末尾時,函數才結束)。

也就是說,沒有 main 函數程序將不知道從哪裏開始執行,運行時會報錯。

綜上所述:第2~6行代碼定義了主函數 main,它的返回值是整數 0,程序將從這裏開始執行。main 函數的返回值在程序運行結束時由系統接收。

關於自定義函數的更多內容,我們將在《C語言函數》一章中詳細講解,這裏不再展開討論。

有的教材中將 main 函數寫作:

void main()
{
    // Some Code...
}

這在 VC6.0 下能夠通過編譯,但在 C-Free、GCC 中卻會報錯,因為這不是標準的 main 函數的寫法,大家不要被誤導,最好按照示例中的格式來寫。

頭文件的概念

還有最後一個問題,示例中第1行的#include <stdio.h>是什麽意思呢?

C語言開發者們編寫了很多常用函數,並分門別類的放在了不同的文件,這些文件就稱為頭文件(header file)。每個頭文件中都包含了若幹個功能類似的函數,調用某個函數時,要引入對應的頭文件,否則編譯器找不到函數。

實際上,頭文件往往只包含函數的說明,也就是告訴我們函數怎麽用,而函數本身保存在其他文件中,在鏈接時才會找到。對於初學者,可以暫時理解為頭文件中包含了若幹函數。

引入頭文件使用#include命令,並將文件名放在< >中,#include 和 < > 之間可以有空格,也可以沒有。

頭文件以.h為後綴,而C語言代碼文件以.c為後綴,它們都是文本文件,沒有本質上的區別,#include 命令的作用也僅僅是將頭文件中的文本復制到當前文件,然後和當前文件一起編譯。你可以嘗試將頭文件中的內容復制到當前文件,那樣也可以不引入頭文件。

.h中代碼的語法規則和.c中是一樣的,你也可以#include <xxx.c>,這是完全正確的。不過實際開發中沒有人會這樣做,這樣看起來非常不專業,也不規範。

較早的C語言標準庫包含了15個頭文件,stdio.h 和 stdlib.h 是最常用的兩個:

  • stdio 是 standard input output 的縮寫,stdio.h 被稱為“標準輸入輸出文件”,包含的函數大都和輸入輸出有關,puts() 就是其中之一。
  • stdlib 是 standard library 的縮寫,stdlib.h 被稱為“標準庫文件”,包含的函數比較雜亂,多是一些通用工具型函數,system() 就是其中之一。

最後的總結

初學編程,有很多基本概念需要了解,本節就涉及到很多,建議大家把上面的內容多讀幾遍,必將有所收獲。

本節開頭的示例是一個C語言程序的基本結構,我們不妨整理一下思路,從整體上再分析一遍:
1) 第1行引入頭文件 stdio.h,這是編程中最常用的一個頭文件。頭文件不是必須要引入的,我們用到了 puts 函數,所以才引入 stdio.h。例如下面的代碼完全正確:

  1. int main()
  2. {
  3. return 0;
  4. }

我們沒有調用任何函數,所以不必引入頭文件。

2) 第2行開始定義主函數 main。main 是程序的入口函數,一個C程序必須有 main 函數,而且只能有一個。

3) 第4行調用 puts 函數向顯示器輸出字符串。

4) 第5行是 main 函數的返回值。程序運行正確一般返回 0。

2018-10-16 22:56:13 c language