C 語言基礎教程(一)顏色加亮

來源:互聯網
上載者:User

首先請看下面這個簡單的 C 程式,猜猜它會做些什麼。猜不出來也沒關係,後面會有詳細的解說。
#include <stdio.h >

int main( void ) /* 一個簡單的程式 */
{
int num; /* 定義一個名叫 num 的變數 */
num = 1; /* 將 1 賦值給 num */

printf( "This is a simple C program.\n" ); /* 調用 printf 函數 */
printf( "My favorite number is %d because it is first.\n", num );

return 0;
}

在對這個程式進行詳細說明之前,我想先請您用編譯器把它編譯成可執行檔,並且運行,看看運行結果和您的猜想是否一致。如果不懂如何進行編譯,請參考這三篇文章:
編譯器使用方法
編譯器Dev-C++安裝&使用教程
Dev-C++ 下載

下面,我將分兩步對這個程式進行詳細的講解。第一步是概要說明,也就是對程式中每一行代碼的含義作簡單講解,以協助您對這個程式有一個大致的理解。第二步是詳細說明,也就是程式中的每一行代碼進行詳細的講解,以加深您的理解。

一、概要說明
#include <stdio.h><- 把另外一個檔案包含進來
這行代碼命令編譯器把標頭檔.h 檔案)stdio.h 中的內容包含到我們的
程式中。stdio.h是C語言的標準標頭檔之一,提供對鍵盤輸入和顯示輸出等的
支援。要使用 printf 函數,就應該包含這個標頭檔。順帶一提,stdio 代表
standard input/output,也就是標準輸入輸出的意思。

int main(void) <- 函數頭
C 程式由一個或多個函數組成。我們的這個程式只有一個函數:main 函數。
圓括弧 () 表明 main 是一個函數;int 表明 main 函數返回一個整數;void 表明
main 函數不接受任何參數。在此,請您緊記,int main(void) 是 ISO/ANSI C
標準中定義的 main 函數定義方法之一。

/* a simple program */ <- 注釋
/* 和 */ 用於對程式進行注釋說明,協助讀者更快更好地理解程式。編譯器
會忽略 /* 和 */ 之間的內容(包括 /* 和 */),不會對它們進行編譯。

{ <- 函數體的開端
這個開大括弧 { 標誌著函數體開始。函數體以閉大括弧 } 結束。在 { 和 }
之間的語句都屬於這個函數。

int num; <- 聲明並且定義變數 num
這個語句表明我們聲明並且定義了一個名叫 num 的變數。int 表明這個變數為
整型變數

num = 1; <- 指派陳述式
這個語句將 1 賦值給變數 num 。執行這個語句後,num 的值等於 1 。

printf( "This is a simple C program.\n" ); <- 函數調用語句
printf 函數是 C 語言標準函數庫裡的函數。這個語句調用 printf 函數在
螢幕上顯示“This is a simple C program.”,並且換行。\n分行符號,它提示
printf 開始新的一行,也就是將游標移動到下一行的開端。如果上面的語句中沒有
\n ,那就不會換行,而且游標會緊跟在“This is a simple program.”後面。

printf( "My favorite number is %d because it is first.\n", num );
%d 告訴 printf 用num的值替換掉 %d ,並且以整數形式顯示num的值。
因為 num 的值為 1 ,所以這個語句在螢幕上顯示“My favorite number is 1
because it is first.
”,並且換行。

return 0; <- 返回語句
C 程式應該返回一個數值給調用它的媒介。返回 0 代表程式無誤退出,
返回 1 代表程式運行時出錯退出。

} <- 函數體結束
函數體以閉大括弧 } 結束。

二、詳細說明
現在,讓我們進一步來瞭解每一行代碼的含義。下面的內容很基礎,也很重要
必須認真弄懂,牢牢掌握

1. #include 預先處理指令標頭檔
在編譯器對我們寫的來源程式進行編譯之前,前置處理器會對我們的寫的原始碼
進行必要的處理,稱為預先處理。#include 就是一個預先處理指令,它命令前置處理器
進行的預先處理是:把特定的標頭檔包含到我們的原始碼裡
#include <stdio.h>的作用是將標頭檔 stdio.h 裡的內容包含進我們的程式,
產生的結果是將 stdio.h 裡的內容一字不漏地插入 #include <stdio.h>出現的
地方,並且刪除 #include <stdio.h>。換句話說,就是用 stdio.h 裡的內容替換
#include <stdio.h>。這個過程是在預先處理階段完成的。C 語言的這種包含檔案的
機製為多個程式共用相同資訊提供了極大的方便。
stdio.h 是 C 語言標準中定義了的標頭檔,它包含著輸入輸出函數的資訊。
所有 C 編譯器都應該有這個標頭檔,這是 ANSI/ISO C 標準中規定的。當然,
ANSI/ISO C 規定的編譯器必須提供的標頭檔可不止這麼一個。標準還規定了許多
別的標頭檔,那些我們會在以後慢慢學到。
有些程式需要包含 stdio.h ,而有些不需要。如果我們的程式沒有使用 printf
函數,那就不需要包含 stdio.h 。
標頭檔中包含著編譯器進行編譯時間所需的資訊。標頭檔中可能指明了函數名和
函數調用方法,但是這些函數的實現代碼並不在標頭檔中,而是在預先編譯好了的
庫檔案裡。
連結器負責在庫檔案中尋找我們的程式所需的代碼,並且把那些代碼和我們寫的
程式進行連結,從而將我的寫的程式連結成可執行檔。一句話,標頭檔用於指導
編譯器正確地將我們寫的來源程式編譯成可執行檔。

2. main 函數
在 C 語言中,main 函數是主函數。每個 C 程式都必須有且只能有一個
main 函數(主函數)!C 程式從 main 函數開始執行,並且在 main 函數中結束。
int是 main 函數的傳回值類型,它表明 main 函數應該返回一個整數給程式的
啟用者(如作業系統)。
如果您想瞭解更多關於 main 函數的東西,請點擊下面的連結:
C/C++ 誤區一:void main

3. 注釋
/* a simple program */
/* */ 之間的內容都是注釋。對程式進行適當的注釋可以協助讀者(包括您自己)
更快更好地理解您寫的代碼。注釋可以在來源程式中的任何地方書寫。/* 和 */ 之間的
任何內容(包括 /* 和 */)都會被編譯器忽略掉。注意:/ 和 * 必須緊挨在一起,
它們之間不能有空格。
/* 我是注釋 */
/*我是
跨行注釋*/
/*
我也是注釋
*/
以上的注釋都是合法的;但下面的注釋是非法的,因為沒寫注釋結束標記 */。
/* 非法,沒有注釋結束標記
下面這個注釋可能會出乎你的意料:
/* 我是注釋開始標記
/* 哦哦,我不是注釋開始標記
我是注釋結束標記,我和第一個 /* 匹配,而不是和第二個 /* 匹配。*/
上面這個注釋中,注釋結束標記 */ 和第一個 /* 匹配,它們之間的內容
都被視為注釋。

C99 中增加了另外一種注釋方式,這種注釋方式使用 // 作為注釋符,和 //
處於同一行,並且在 // 右邊的內容都被當作注釋。/ 和 / 之間不能有空格。
// 我是注釋
int rigue; //注釋放在這裡也是合法的
上面的注釋在 C99 中是合法的,但是在 C89 中是非法的。也就是說,老舊的
編譯器可能不支援 // 注釋符。VC6 支援 //,TC2 不支援。

4. 大括弧與函數體
C 語言中,所有函數都以大括弧({ })作為界定符。函數體從開大括弧 {
開始,以閉大括弧 } 結束。在後續教程中,我會對函數進行更詳細的講解。

5. int num;
這個語句聲明並且定義變數 num 。這一行末尾的分號(;)表明這一行
是一個語句。; 是語句的一部分,單獨一個 ; 也是一個合法的 C 語句。
int 是 C 語言中的一個關鍵字,它代表 C 語言裡的一種基礎資料型別 (Elementary Data Type):整型。
關鍵字是語言的保留字,不能用作其它用途。例如:我們不能關鍵字來做變數名或者
函數名。
標識符是指我們為變數或函數等取的名字。在這個語句中,num 就是標識符。
C 語言中,所有變數在使用前都必須聲明。C89 中,變數的聲明必須位於
函數體或者程式塊的開端。例如:
int main( void ) /* C89 */
{ /* 函數體開始 */
int doors;
int dogs;
doors = 5;
dogs = 3;
{ /* 程式塊開始 */
int dig;
int dug;
dig = 6;
dug = 8;
} /* 程式塊結束 */

return 0;
} /* 函數體結束 */
而在 C99 中,聲明可以位於函數體或者程式塊的任何地方。但是,變數仍然
需要在聲明之後才可使用。例如:
int main( void ) /* C99 */
{ /* 函數體開始 */
int doors;
doors = 5;
{ /* 程式塊開始 */
int dig;
dig = 6;
int dug;
dug = 8;
} /* 程式塊結束 */
int dogs;
dogs = 3;

return 0;
} /* 函數體結束 */
上面的程式在 C99 中是合法的,但是在 C89 中卻是非法的。當前支援C99 的
編譯器不多,所以上面的代碼您的編譯器很有可能編譯不了。故而,為了使我們的
代碼具有良好的可移植性,我們應該儘可能少用,甚至不用 C99 中的新特性。

6. 賦值
num = 1;
賦值是 C 語言中的一種基本操作。上面的語句是一個指派陳述式,它的含義
是:將 1 賦值給變數 num 。賦值操作完成後,num 的值等於 1 。

7. printf 函數
printf( "This is a simple C program.\n" );
printf( "My favorite number is %d because it is first.\n", num );
這兩行代碼都調用了 printf 函數。printf 是一個標準 C 函數,也就是說,
它是 C 語言標準函數庫裡定義了的函數。圓括弧 () 表明 printf 是一個函數,
圓括弧裡的內容會被傳遞給 printf 函數。例如,上面第一行代碼把“This is a
simple C program.\n”(不包括雙引號)傳遞給 printf 函數,然後由 printf
函數把這些資訊顯示於顯示器。\n分行符號,它提示 printf 開始新的一行。
正因為 \n 是分行符號,所以 \n 不會顯示出來,而是進行了換行。如果上面的語句中
沒有 \n ,那就不會換行。
上面代碼第二行中的 %d 告訴 printf 用 num 的值替換掉 %d ,並且以
整數形式顯示 num 的值。
%d 被稱為預留位置,它告訴 printf 應該在什麼地方顯示 num 的值。% 用於
提醒 printf 在此處顯示一個變數的值(本例中是 num 的值);d 告訴 printf 以
十進位整數的形式顯示 num 的值。

8. return(返回)語句
return 0;
這個 return 語句是我們程式中的最後一個語句。int main( void ) 中的 int
表示 main 函數應該返回一個整數,所以我們要使用 return 語句來返回一個整數。
如果您想瞭解更多關於傳回值的東西,請點擊下面連結,查看文章的第四點
C/C++ 誤區一:void main

上面所說的某些內容您暫時可能還不太理解,但是不用害怕,牢牢地把它們記住,然後繼續往下學吧!隨著學習的深入,就會逐漸搞明白。現階段只要有這個概念就足夠了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.