C語言(一)
阿新 • • 發佈:2018-11-24
第一章 基礎知識
- 1.1 基本框架
- 任何一個c語言程式都必須包括以下格式:
- int main(int argc, char *argv[] )
- {
- return 0;
- }
- 這是c語言的基本結構,任何一個程式都必須包含這個結構。括號內可以不寫任何內容,那麼該程式將不執行任何結果。
- 1.1.1 main()
-
- 在c語言中稱之為“主函式”,一個c程式有且僅有一個main函式,任何一個c程式總是從main函式開始執行,main函式後面的一對圓括號不能省略。
- main(int argc,char**argv) {} 第一個引數是表示輸入的字串的數目,第二個引數是指向存放的字串
- 在c語言中稱之為“主函式”,一個c程式有且僅有一個main函式,任何一個c程式總是從main函式開始執行,main函式後面的一對圓括號不能省略。
- 1.1.1.1 C語言中int main()和int main(void)區別
- 1.K&R書上main函式定義寫成main(){...} 形式,不寫返回值型別也不寫引數列表,這是Old Style C的風格。Old Style C規定不寫返回值型別就表示返回int型,不寫引數列表 就表示引數型別和個數沒有明確指出。這種寬鬆的規定會導致很多複雜的Bug產生,不幸的是現在的C標準為了相容舊的程式碼仍然保留了這種語法。
- 2. 其實系統在呼叫main函式時是傳引數的,所以main函式最標準的形式應 該是int main(int argc, char *argv[])。C標準也規定了int main(void) 這種形式,如果不使用系統傳進來的兩個引數也可以寫成這種形式。但除了這兩種形式之外,以其它形式定義main函式都是錯誤的或不可移植的。
- 1.K&R書上main函式定義寫成main(){...} 形式,不寫返回值型別也不寫引數列表,這是Old Style C的風格。Old Style C規定不寫返回值型別就表示返回int型,不寫引數列表 就表示引數型別和個數沒有明確指出。這種寬鬆的規定會導致很多複雜的Bug產生,不幸的是現在的C標準為了相容舊的程式碼仍然保留了這種語法。
- 1.1.1.2 標準形式
- 在最新的 C99 標準中,只有以下兩種定義方式是正確的:
- int main(void){}
- //整數型別主函式(無型別) = int main()
- int main(int argc,char **argv)
- //整數型別主函式(整數型別 統計引數個數,字元型別*陣列指標至字元[])
- 在最新的 C99 標準中,只有以下兩種定義方式是正確的:
- 1.1.1.3 C++98中的定義
- 如下兩種main函式的定義方式:
- int main( )
- int main( int argc, char *argv[] )
- 如下兩種main函式的定義方式:
-
- 1.1.2 函式體
- 被大括號{ }括起來的內容稱為main函式的函式體,這部分內容就是計算機要執行的內容.在{ }裡面每一句話後面都有一個分號(;),在c語言中,我們把以一個分號結尾的一句話叫做一個c語言的語句,分號是語句結束的標誌。
- 1.1.3 #include<stdio.h>
- 1.1.3.1 注意
- (1)以#號開頭
- (2)不以分號結尾
- (3)# include”stdio.h”也是對的
- 1.1.3.2 預處理
- 這一行沒有分號,所以不是語句,在c語言中稱之為命令列,或者叫做“預編譯處理命令”。 編譯預處理不是C語言的一部分,不佔執行時間,不要加分號。C語言編譯的程式稱為源程式,它以ASCII數值存放在文字檔案中。
- 1.1.3.3 # include “stdio.h”與#include <stdio.h>區別
- <>搜尋順序為:系統目錄-->環境變數目錄-->使用者自定義目錄。
- ""則是使用者自定義目錄-->系統目錄-->環境變數目錄.
- 1.1.3.4 檔案包含的考查點:
- 這裡一個C語言程式是有兩個檔案組成,分別是no1.c, no2.c。那麼no1.c中最開始有個#include”no2.c”他表示把第二個檔案的內容給包含過來,那麼no1.c中呼叫add()函式的時候就可以了把數值傳到no2.c中的被呼叫函式add()了。
- 一個檔案必須要有main函式。這句話錯了。例如:no2.c就沒有。
- 標頭檔案一定是以.h結束的。這句話錯了。例如:no1.c中就是#include”no2.c”以.c結尾的。
- 1.1.3.1 注意
- 1.1.4 註釋
- 程式中以 /*開頭並且以*/結尾的部分表示程式的註釋部分,註釋可以新增在程式的任何位置,為了提高程式的可讀性而新增,但計算機在執行主函式內容時完全忽略註釋部分,換而言之就是計算機當做註釋部分不存在於主函式中。
- 注意:1.F // /*
- */
- 2.F /* /* */ */
- 3.T // //
- 任何一個c語言程式都必須包括以下格式:
- 1.2 C程式的生成過程
- C程式是先由原始檔經編譯生成目標檔案,然後經過連線生成可執行檔案。
- 編譯過程
- 源程式的副檔名為 .c -(編譯)-> 目標程式的副檔名為 .obj -(連線)->可執行程式的副檔名為 .exe 。
- 1.3 識別符號
- 概念
- 在編寫程式時,必須為函式、變數等命名,這個名字稱為識別符號。
- 1.3.1 識別符號分類(都是·小寫)
- ①關鍵字(32個)(有固定含義,不可改變)
- 型別說明符:int,float,double等
- 語句定義符:if,for,while等
- ②預定義識別符號(有特殊含義,可以改變)
- 庫函式的名字:printf , scanf 等
- 編譯預處理命令名:include等
- ③使用者自定義的識別符號
- ⅰ格式合法,ⅱ不能使用關鍵字,ⅲ見名知意
- ①關鍵字(32個)(有固定含義,不可改變)
- 1.3.2 關鍵字
- 關鍵字是具有特定含義的,專門用來說明c語言特定成分的一類識別符號,不能用作使用者的識別符號。
- auto break case char union
- do double else enum extern
- goto if int long short
- signed static sizeof struct switch
- unsigned void for while typedef
- continue float return typedef default
- 關鍵字是具有特定含義的,專門用來說明c語言特定成分的一類識別符號,不能用作使用者的識別符號。
- 1.3.3 預定義識別符號
- 預定義識別符號在c語言中也有特定的含義,但可以用作使用者識別符號,預定義識別符號分為兩類:
- (1)、庫函式名字,比如(printf,scanf,sin,isdigit等)
- (2)、編譯處理命令名,比如(define,include)
- 預定義識別符號在c語言中也有特定的含義,但可以用作使用者識別符號,預定義識別符號分為兩類:
- 1.3.4 使用者識別符號
- 使用者根據需要自己定義的識別符號稱為使用者識別符號。無論如何自定義識別符號,都必須符合識別符號的三條命名規則。
- 注意:正常系統函式由_開頭,因此不建議自定義函式以下劃線開
- 1.3.4.1 命名規則
- C語言中識別符號的命名規則如下:
- 1、識別符號只能由字母、數字、下劃線組成;
- 2、識別符號的第一個字母必須是字母和下劃線;(開頭)
- 3、識別符號區分大小寫字母,如If和if是兩個完全不同的識別符號。
- 合法識別符號如下:
- A6 b_3 _mn _
- 非法的識別符號如下:
- ab#12, 8m , tr3:4 , yes no
- 識別符號不能與程式中具有特殊意義的關鍵字相同,
- 不能與使用者編制的函式名、C語言庫函式相同,
- 在程式中各種識別符號儘量不要重複,以便區分。
- 選擇變數名和其他識別符號時,應注意做到 “見名知義”。
- C語言中識別符號的命名規則如下:
- 概念