C 語言基礎(chǔ)教程(一)顏色加亮
#include <stdio.h>
int main( void ) /* 一個簡單的程序 */
{
int num; /* 定義一個名叫 num 的變量 */
num = 1; /* 將 1 賦值給 num */
printf( "This is a simple C program.\n" ); /* 調(diào)用 printf 函數(shù) */
printf( "My favorite number is %d because it is first.\n", num );
return 0;
}
在對這個程序進(jìn)行詳細(xì)說明之前,我想先請您用編譯器把它編譯成可執(zhí)行文件,并且運行,看看運行結(jié)果和您的猜想是否一致。如果不懂如何進(jìn)行編譯,請參考這三篇文章:
編譯器使用方法
編譯器Dev-C++安裝&使用教程
Dev-C++ 下載
下面,我將分兩步對這個程序進(jìn)行詳細(xì)的講解。第一步是概要說明,也就是對程序中每一行代碼的含義作簡單講解,以幫助您對這個程序有一個大致的理解。第二步是詳細(xì)說明,也就是程序中的每一行代碼進(jìn)行詳細(xì)的講解,以加深您的理解。
一、概要說明
#include <stdio.h>
這行代碼命令編譯器把頭文件(.h 文件)stdio.h 中的內(nèi)容包含到我們的
程序中。stdio.h是C語言的標(biāo)準(zhǔn)頭文件之一,提供對鍵盤輸入和顯示輸出等的
支持。要使用 printf 函數(shù),就應(yīng)該包含這個頭文件。順帶一提,stdio 代表
standard input/output,也就是標(biāo)準(zhǔn)輸入輸出的意思。
int main(void) <- 函數(shù)頭
C 程序由一個或多個函數(shù)組成。我們的這個程序只有一個函數(shù):main 函數(shù)。
圓括號 () 表明 main 是一個函數(shù);int 表明 main 函數(shù)返回一個整數(shù);void 表明
main 函數(shù)不接受任何參數(shù)。在此,請您緊記,int main(void) 是 ISO/ANSI C
標(biāo)準(zhǔn)中定義的 main 函數(shù)定義方法之一。
/* a simple program */ <- 注釋
/* 和 */ 用于對程序進(jìn)行注釋說明,幫助讀者更快更好地理解程序。編譯器
會忽略 /* 和 */ 之間的內(nèi)容(包括 /* 和 */),不會對它們進(jìn)行編譯。
{ <- 函數(shù)體的開端
這個開大括弧 { 標(biāo)志著函數(shù)體開始。函數(shù)體以閉大括弧 } 結(jié)束。在 { 和 }
之間的語句都屬于這個函數(shù)。
int num; <- 聲明并且定義變量 num
這個語句表明我們聲明并且定義了一個名叫 num 的變量。int 表明這個變量為
整型變量。
num = 1; <- 賦值語句
這個語句將 1 賦值給變量 num 。執(zhí)行這個語句后,num 的值等于 1 。
printf( "This is a simple C program.\n" ); <- 函數(shù)調(diào)用語句
printf 函數(shù)是 C 語言標(biāo)準(zhǔn)函數(shù)庫里的函數(shù)。這個語句調(diào)用 printf 函數(shù)在
屏幕上顯示“This is a simple C program.”,并且換行。\n 是換行符,它提示
printf 開始新的一行,也就是將光標(biāo)移動到下一行的開端。如果上面的語句中沒有
\n ,那就不會換行,而且光標(biāo)會緊跟在“This is a simple program.”后面。
printf( "My favorite number is %d because it is first.\n", num );
%d 告訴 printf 用num的值替換掉 %d ,并且以整數(shù)形式顯示num的值。
因為 num 的值為 1 ,所以這個語句在屏幕上顯示“My favorite number is 1
because it is first.”,并且換行。
return 0; <- 返回語句
C 程序應(yīng)該返回一個數(shù)值給調(diào)用它的媒介。返回 0 代表程序無誤退出,
返回 1 代表程序運行時出錯退出。
} <- 函數(shù)體結(jié)束
函數(shù)體以閉大括弧 } 結(jié)束。
二、詳細(xì)說明
現(xiàn)在,讓我們進(jìn)一步來了解每一行代碼的含義。下面的內(nèi)容很基礎(chǔ),也很重要,
必須認(rèn)真弄懂,牢牢掌握。
1. #include 預(yù)處理指令和頭文件
在編譯器對我們寫的源程序進(jìn)行編譯之前,預(yù)處理器會對我們的寫的源代碼
進(jìn)行必要的處理,稱為預(yù)處理。#include 就是一個預(yù)處理指令,它命令預(yù)處理器
進(jìn)行的預(yù)處理是:把特定的頭文件包含到我們的源代碼里。
#include <stdio.h>
產(chǎn)生的結(jié)果是將 stdio.h 里的內(nèi)容一字不漏地插入 #include <stdio.h>
地方,并且刪除 #include <stdio.h>
#include <stdio.h>
機(jī)制為多個程序共享相同信息提供了極大的方便。
stdio.h 是 C 語言標(biāo)準(zhǔn)中定義了的頭文件,它包含著輸入輸出函數(shù)的信息。
所有 C 編譯器都應(yīng)該有這個頭文件,這是 ANSI/ISO C 標(biāo)準(zhǔn)中規(guī)定的。當(dāng)然,
ANSI/ISO C 規(guī)定的編譯器必須提供的頭文件可不止這么一個。標(biāo)準(zhǔn)還規(guī)定了許多
別的頭文件,那些我們會在以后慢慢學(xué)到。
有些程序需要包含 stdio.h ,而有些不需要。如果我們的程序沒有使用 printf
函數(shù),那就不需要包含 stdio.h 。
頭文件中包含著編譯器進(jìn)行編譯時所需的信息。頭文件中可能指明了函數(shù)名和
函數(shù)調(diào)用方法,但是這些函數(shù)的實現(xiàn)代碼并不在頭文件中,而是在預(yù)先編譯好了的
庫文件里。
鏈接器負(fù)責(zé)在庫文件中尋找我們的程序所需的代碼,并且把那些代碼和我們寫的
程序進(jìn)行鏈接,從而將我的寫的程序鏈接成可執(zhí)行文件。一句話,頭文件用于指導(dǎo)
編譯器正確地將我們寫的源程序編譯成可執(zhí)行文件。
2. main 函數(shù)
在 C 語言中,main 函數(shù)是主函數(shù)。每個 C 程序都必須有且只能有一個
main 函數(shù)(主函數(shù))!C 程序從 main 函數(shù)開始執(zhí)行,并且在 main 函數(shù)中結(jié)束。
int是 main 函數(shù)的返回值類型,它表明 main 函數(shù)應(yīng)該返回一個整數(shù)給程序的
激活者(如操作系統(tǒng))。
如果您想了解更多關(guān)于 main 函數(shù)的東西,請點擊下面的鏈接:
C/C++ 誤區(qū)一:void main
3. 注釋
/* a simple program */
/* */ 之間的內(nèi)容都是注釋。對程序進(jìn)行適當(dāng)?shù)淖⑨尶梢詭椭x者(包括您自己)
更快更好地理解您寫的代碼。注釋可以在源程序中的任何地方書寫。/* 和 */ 之間的
任何內(nèi)容(包括 /* 和 */)都會被編譯器忽略掉。注意:/ 和 * 必須緊挨在一起,
它們之間不能有空格。
/* 我是注釋 */
/*我是
跨行注釋*/
/*
我也是注釋
*/
以上的注釋都是合法的;但下面的注釋是非法的,因為沒寫注釋結(jié)束標(biāo)記 */。
/* 非法,沒有注釋結(jié)束標(biāo)記
下面這個注釋可能會出乎你的意料:
/* 我是注釋開始標(biāo)記
/* 哦哦,我不是注釋開始標(biāo)記
我是注釋結(jié)束標(biāo)記,我和第一個 /* 匹配,而不是和第二個 /* 匹配。*/
上面這個注釋中,注釋結(jié)束標(biāo)記 */ 和第一個 /* 匹配,它們之間的內(nèi)容
都被視為注釋。
C99 中增加了另外一種注釋方式,這種注釋方式使用 // 作為注釋符,和 //
處于同一行,并且在 // 右邊的內(nèi)容都被當(dāng)作注釋。/ 和 / 之間不能有空格。
// 我是注釋
int rigue; //注釋放在這里也是合法的
上面的注釋在 C99 中是合法的,但是在 C89 中是非法的。也就是說,老舊的
編譯器可能不支持 // 注釋符。VC6 支持 //,TC2 不支持。
4. 大括號與函數(shù)體
C 語言中,所有函數(shù)都以大括?。?FONT color=#1196ee>{ })作為界定符。函數(shù)體從開大括弧 {
開始,以閉大括弧 } 結(jié)束。在后續(xù)教程中,我會對函數(shù)進(jìn)行更詳細(xì)的講解。
5. int num;
這個語句聲明并且定義了變量 num 。這一行末尾的分號(;)表明這一行
是一個語句。; 是語句的一部分,單獨一個 ; 也是一個合法的 C 語句。
int 是 C 語言中的一個關(guān)鍵字,它代表 C 語言里的一種基本數(shù)據(jù)類型:整型。
關(guān)鍵字是語言的保留字,不能用作其它用途。例如:我們不能關(guān)鍵字來做變量名或者
函數(shù)名。
標(biāo)識符是指我們?yōu)樽兞炕蚝瘮?shù)等取的名字。在這個語句中,num 就是標(biāo)識符。
C 語言中,所有變量在使用前都必須聲明。C89 中,變量的聲明必須位于
函數(shù)體或者程序塊的開端。例如:
int main( void ) /* C89 */
{ /* 函數(shù)體開始 */
int doors;
int dogs;
doors = 5;
dogs = 3;
{ /* 程序塊開始 */
int dig;
int dug;
dig = 6;
dug = 8;
} /* 程序塊結(jié)束 */
return 0;
} /* 函數(shù)體結(jié)束 */
而在 C99 中,聲明可以位于函數(shù)體或者程序塊的任何地方。但是,變量仍然
需要在聲明之后才可使用。例如:
int main( void ) /* C99 */
{ /* 函數(shù)體開始 */
int doors;
doors = 5;
{ /* 程序塊開始 */
int dig;
dig = 6;
int dug;
dug = 8;
} /* 程序塊結(jié)束 */
int dogs;
dogs = 3;
return 0;
} /* 函數(shù)體結(jié)束 */
上面的程序在 C99 中是合法的,但是在 C89 中卻是非法的。當(dāng)前支持C99 的
編譯器不多,所以上面的代碼您的編譯器很有可能編譯不了。故而,為了使我們的
代碼具有良好的可移植性,我們應(yīng)該盡可能少用,甚至不用 C99 中的新特性。
6. 賦值
num = 1;
賦值是 C 語言中的一種基本操作。上面的語句是一個賦值語句,它的含義
是:將 1 賦值給變量 num 。賦值操作完成后,num 的值等于 1 。
7. printf 函數(shù)
printf( "This is a simple C program.\n" );
printf( "My favorite number is %d because it is first.\n", num );
這兩行代碼都調(diào)用了 printf 函數(shù)。printf 是一個標(biāo)準(zhǔn) C 函數(shù),也就是說,
它是 C 語言標(biāo)準(zhǔn)函數(shù)庫里定義了的函數(shù)。圓括號 () 表明 printf 是一個函數(shù),
圓括號里的內(nèi)容會被傳遞給 printf 函數(shù)。例如,上面第一行代碼把“This is a
simple C program.\n”(不包括雙引號)傳遞給 printf 函數(shù),然后由 printf
函數(shù)把這些信息顯示于顯示器。\n 是換行符,它提示 printf 開始新的一行。
正因為 \n 是換行符,所以 \n 不會顯示出來,而是進(jìn)行了換行。如果上面的語句中
沒有 \n ,那就不會換行。
上面代碼第二行中的 %d 告訴 printf 用 num 的值替換掉 %d ,并且以
整數(shù)形式顯示 num 的值。
%d 被稱為占位符,它告訴 printf 應(yīng)該在什么地方顯示 num 的值。% 用于
提醒 printf 在此處顯示一個變量的值(本例中是 num 的值);d 告訴 printf 以
十進(jìn)制整數(shù)的形式顯示 num 的值。
8. return(返回)語句
return 0;
這個 return 語句是我們程序中的最后一個語句。int main( void ) 中的 int
表示 main 函數(shù)應(yīng)該返回一個整數(shù),所以我們要使用 return 語句來返回一個整數(shù)。
如果您想了解更多關(guān)于返回值的東西,請點擊下面鏈接,查看文章的第四點。
C/C++ 誤區(qū)一:void main
上面所說的某些內(nèi)容您暫時可能還不太理解,但是不用害怕,牢牢地把它們記住,然后繼續(xù)往下學(xué)吧!隨著學(xué)習(xí)的深入,就會逐漸搞明白?,F(xiàn)階段只要有這個概念就足夠了。
相關(guān)文章
C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項
C語言庫函數(shù)char *strcpy(char *dest, const char *src)把src所指向的字符串復(fù)制到dest,下面這篇文章主要給大家介紹了關(guān)于C語言中strcpy()函數(shù)的具體實現(xiàn)及注意事項的相關(guān)資料,需要的朋友可以參考下2022-11-11Visual Studio新建類從默認(rèn)internal改為public
本文將介紹如何將Visual Studio中的internal修飾符更改為public,以實現(xiàn)更廣泛的訪問和重用,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-09-09