1. 程式人生 > >【筆記】c語言學習筆記part1

【筆記】c語言學習筆記part1

最近學習oc,把之前學得很水的c語言重新過了一遍,打算整理一些基礎的東西,方便以後回顧

1.c程式編譯的過程

/*

1.預處理(Preprocessing):對源程式進行“替代”工作,生成一個沒有巨集定義、沒有條件編譯指令、沒有特殊 
                         符號的輸出檔案
  過程主要包括以下內容:
      1.將所有的#define刪除,並且展開所有的巨集定義(字元替換)
      2.處理所有的條件預編譯指令,比如#if #ifdef #elif #else #endif等
      3.處理#include 預編譯指令,將被包含的檔案插入到該預編譯指令的位置
      4.刪除所有註釋 
      5.新增行號和檔案標識,以便編譯時產生除錯用的行號及編譯錯誤警告行號
      6.保留所有的#pragma編譯器指令,因為編譯器需要使用它們


2.編譯(Compilation):將預處理完的檔案進行一系列的詞法分析,語法分析,語義分析及優化後生成相應的彙編程式碼


3.彙編(Assembly):將編譯過程的彙編程式碼轉換成機器碼


4.連結(Linking):將多個目標檔案以及所需的庫檔案連結成最終的可執行檔案

*/

2.標頭檔案的匯入

/*

標頭檔案:包含功能函式、資料介面宣告的載體檔案,用於儲存程式的宣告(declaration),不佔用記憶體空間
【定義檔案:用於儲存程式的實現 (implementation)】

什麼時候需要匯入:需要使用到外部提供的函式或者變數時

匯入的方式:
         < >:用於匯入系統自帶的庫,編譯器會先到儲存系統標準標頭檔案的位置查詢標頭檔案,如果沒有找到,再到當前目錄中查詢
         " ":用於匯入使用者自定義的標頭檔案  編譯器會先在當前檔案中查詢標頭檔案,如果沒有找到,再去系統庫中查詢
            (因此使用" "匯入系統提供的標頭檔案時會影響編譯速度)

*/

3.main函式相關

/*
main函式是c程式的入口函式,即c程式的執行總是從main函式開始。
c語言發展到今天,對main函式有多種不同的寫法,但是在最新的 C99 標準中,只有兩種定義方式是正確的
*/

1.int main(void){   //無引數形式
  return 0;
}

2.int main(int argc, char *argv[]){   //含引數形式
  return 0;
}

/*
其中,int 表明了main函式的返回型別,用於記錄程式的執行狀態
(return 0:將0返回給作業系統,表示程式正常退出,並結束函式)
void: 表示沒有給函式傳遞引數
argc(argument count): 表示執行程式時,編譯器傳遞過來的引數個數
argv(argument value):指向字串的指標陣列,以字串形式儲存與argc對應的引數

一般在整合開發環境(IDE環境)下,程式總是從main函式開始,不用向它傳遞引數,因此通常argc = 1,argv = 程式路徑
*/

4.關鍵字與保留字

/*

關鍵字 ( keyword):word or identifier that has a particular meaning to the 
                  programming language;

保留字 ( reserved word):a reserved word is a word that cannot be used as an 
                        identifier, and a reserved word may have no meaning.

    關鍵字是程式語言規定的有特定含義的詞或識別符號,而保留字是不能定義為識別符號的詞,為
系統保留,有些保留字可能並沒有什麼意義。
(例如java中的goto保留字,它並不是關鍵字,沒有什麼具體含義,僅為系統保留而已。)

    但是在c語言中是不區分保留字與關鍵字的,所有保留字都為關鍵字.

*/

//根據關鍵字的作用,可以分為四類

//1.資料型別關鍵字
 char 	     //宣告字元型變數或函式
 double      //宣告雙精度變數或函式
 enum	     //宣告列舉型別 
 float	     //宣告浮點型變數或函式 
 int	     //宣告整型變數或函式 
 long	     //宣告長整型變數或函式 
 short	     //宣告短整型變數或函式 
 signed	     //宣告有符號型別變數或函式 
 struct{}    //宣告結構體變數或函式 
 union{}	 //宣告共用體資料型別 
 unsigned	 //宣告無符號型別變數或函式 
 void	     //宣告函式無返回值或無引數,宣告無型別指標(基本上就這三個作用)

//2.控制語句關鍵字
 for	     //一種迴圈語句(迴圈語句關鍵詞)
 do 	     //迴圈語句的迴圈體(迴圈語句關鍵詞)
 while 	     //迴圈語句的迴圈條件(迴圈語句關鍵詞)
 break	     //跳出當前迴圈(迴圈語句關鍵詞)
 continue	 //結束當前迴圈,開始下一輪迴圈(迴圈語句關鍵詞)
 if	         //條件語句分支(條件語句關鍵詞)
 else 	     //條件語句否定分支(條件語句關鍵詞)
 goto	     //無條件跳轉語句(條件語句關鍵詞)
 switch      //用於開關語句(開關語句)
 case	     //開關語句分支(開關語句)
 default	 //開關語句中的“其他”分支(開關語句)
 return 	 //子程式返回語句(返回語句)

//3.儲存型別關鍵字
 auto	      //宣告自動變數(一般不使用)
 extern	      //宣告變數是在其他檔案正宣告(也可以看做是引用變數)
 register	  //宣告暫存器變數
 static	      //宣告靜態變數

//4.其他關鍵字
const	      //宣告常型別

sizeof	      //用於計算特定型別或特定型別變數的資料型別長度

typedef	      //常規變數型別定義,資料型別取別名,指標型別定義,函式地址說明,函式宣告,函式指標定義等

volatile	  //說明變數在程式執行中可被隱含地改變