zerglurker的C語言教程002

來源:互聯網
上載者:User

標籤:c++   c語言   語言   編程   

經過上節課,大家現在已經有了一個可啟動並執行C語言程式、相關代碼和開發環境。

也許你會有一點疑問,為什麼是建立main.cpp而不是main.c

另外,printf是什嗎?main是什嗎?#include是什嗎?

嗯,不要急,這些問題我都會慢慢告訴你們。

通過上節課的內容,我們知道代碼要想編程程式,是需要一個工具的。

在windows下面,該工具vs提供了;而在linux下面,該工具叫做gcc。

這個工具,就是我們後面會提到的,稱為編譯器的東西。因為它將原始碼編碼轉譯為可運行檔案,所以叫做編譯器。

為了說明後面的內容,我們先建立一個標頭檔:

按右鍵項目,選擇添加→建立項

選擇中的標頭檔,檔案名稱輸入public.h

然後新加一行代碼,如下面所示(基於上課的代碼):

#include<stdio.h>

#include“public.h”

 

intmain(intargc,char**argv,char**env)

{

         printf("hello world!\n");

         return0;

}

下面我們再來看看代碼。任何一個C或者C++的原始碼,基本都會有兩個部分:標頭檔引用說明和函數實現

這裡#include<stdio.h>就是標頭檔引用說明部分。它告訴編譯器,我這裡會用到一些其他檔案裡面聲明的函數。

#include 有兩種方式,一種是上文提到,另外一種是用雙引號如下面的代碼一樣

#include“public.h”

兩者的區別是,前者告訴編譯器,我引用的檔案是庫檔案的標頭檔(庫檔案的詳細概念後面會講,這裡各位可以簡單的理解為作業系統提供的基本函數,用來簡化軟體開發。),請從系統標頭檔開始找起;後者告訴編譯器,這個標頭檔是我自己定義的,請先從目前的目錄找起。

這樣編譯器就會根據你的指示,去尋找這些標頭檔。

intmain(intargc,char**argv,char**env)

這行代碼,告訴編譯器,我這裡有一個函數叫做main

它有三個參數argc argv和env,它的返回值是整數

這裡特彆強調的一點是main函數,在一個程式中只能被實現一次!

因為這個函數有一個特別的函數,它是所有代碼的起點,程式的入口函數。

也就是程式啟動並執行時候,會首先運行該函數,而不是其他的函數。

所以這個函數也只能實現一次,否則有多個實現,就相當於是有多個入口,你讓程式從哪個進入呢?

畢竟從一個進,其他入口怎麼辦?所以乾脆定義一個規則,一個程式只能定義一個入口。這樣大家都好辦了。

也許你手上有一本教材,或者別的什麼資料,它的main函數是這樣給的:

int main(intargc)

int main(intargc,char* argv[])

int main(intargc,char*argv[],char*env[])

甚至乾脆是這樣的

int main()

以及這樣的

void main()

嗯,不要激動,他們都是對的,我也是對的

就像我上面說過的,這個函數只是告訴編譯器,我的入口在這裡

至於這個入口是個什麼樣的入口,編譯並不太關心。

但是注意!!雖然你甚至可以這樣定義main函數:int main(void*param)

可是系統在調用你的這個入口的時候,它會按照啟動時參數的個數(argc)啟動時參數的列表(argv)啟動時環境變數列表(env)的順序傳遞參數。從可以看到param在啟動並執行時候,系統傳遞進來的值是1。表明啟動時只使用了一個參數。其他的參數你可以不要,但是你不能更改系統給你的參數。

所以我們定義main函數最好按照大家的約定來

而且更有意思的是,儘管你可能不想要這三個參數,可是系統仍然會給出,完全無視你的需求

比如我如下定義main函數

從實際調試情況來看,系統仍然將argv(也就是啟動參數列表)和env(運行環境列表)傳遞給了我。只是我需要用一些特殊的手法才能看到這種情況。

所以,大家定義main函數的時候最好採用我給的方法:

intmain(intargc,char**argv,char**env)

既然你無法捨棄,為了程式的可控性,最好還是都拿著——畢竟不管你拿還是不拿,它都在哪裡,相對於不可控的情況,拿在手裡心裡更加踏實。

好了,總結一下:

本節主要學習了以下幾點:

1 原始碼的構成有兩個部分:標頭檔和函數實現

2 如何建立一個自訂的標頭檔

3 入口main函數的知識。

那麼現在你現在算是基本有了C語言(或者說是C++語言)入門的第一步。

注意第一點!以後不論你接觸到的代碼有多麼複雜或者多麼簡單,都離不開這個框(否則要麼是一個無用的程式,要麼是一個錯誤的程式)。

關於main函數裡面其他內容,在下章和後續章節我還會深入下去,所以千萬別忘記了。

zerglurker的C語言教程002

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.