C語言的總結

C程序的頂層結構

一個C程序由源文件、依賴的庫、數據和文檔構成,其中源文件又分爲兩類,一類是頭文件(.h),一類是定義文件(.c)。庫由源文件編譯而來,包含數據和文檔,分爲靜態庫和動態庫兩類。庫通過頭文件公佈其提供的數據和功能。

靜態庫的編譯命令爲:

ar cr lib庫名.a 目標文件1 目標文件2 ... 目標文件n

動態庫的編譯命令爲:

gcc -shared -fPIC -o lib庫名.so 目標文件1 目標文件2 ... 目標文件n

鏈接靜態庫或動態庫的方式爲:

  gcc ... -L. lib庫名.c
或 gcc ... -L. -l庫名

C程序頂層結構

C程序定義文件的結構

定義文件一般包含類型定義、預處理指令、變量聲明,變量定義,函數原型、函數定義和註釋。由於直接在定義文件中定義的變量在所有函數之外,所以爲全局變量。函數定義對應至多一個函數原型。在一個程序中必須有且只有一個定義文件定義main函數,且main函數沒有原型。每個函數定義都有唯一一個函數體,在函數體中定義的變量爲局部變量。函數體中可以包含多條語句。
定義文件結構

C程序頭文件的結構

C語言的頭文件中一般只包括類型定義、處理器指令、函數原型、變量聲明和註釋等,以支持在多個文件中共享這些信息。
頭文件結構

C程序中的語句

C語言中的語句分爲複合語句、表達式語句、函數調用語句、空語句和控制語句等5類,其中複合語句同函數體一樣,可以包含預處理指令、類型定義、函數原型、變量聲明、變量定義和註釋,同時符合語句由0到多條語句組成,表達式語句是由表達式後加;構成,函數調用語句是函數調用後加;構成,空語句是隻有一個;不執行任何命令的語句,控制語句包括選擇、循環控制和跳轉三類。
語句

C程序中的表達式和數據類型

C程序的表達式由操作數和運算符組成,根據運算符分爲關係表達式、邏輯表達式、算術表達式等。運算符分爲算術運算符,賦值運算符、關係運算符、邏輯運算符、條件運算符、逗號運算符和按位運算符,還有sizeof運算符等。表達式的操作數由函數、常量、變量和子表達式提供。常量、變量和函數等都有相應的類型,在聲明、定義變量、函數時都要指定它們的類型。C語言中的類型分爲基本類型和複合類型,其中基本類型包括整型、浮點型、字符型和指針等,而複合類型包括數組、結構體、聯合和枚舉類型,且C語言中的字符串是最後一個字符爲\0字符的字符數組。
表達式和數據類型

C語言的標準庫

C語言的標準庫包括標準輸入輸出庫、數學計算庫、浮點數特性等。其中<stddef.h>是常用類型定義,包含了一些可用的類型包括ptrdiff_t,是兩個指針相減運算時的結果的數據類型,size_t是運算符sizeof的返回值類型,wchar_t是支持國際化的寬字符類型。<stddef.h>也定義了NULL宏,同時也定義了offsetof宏,用以計算結構的起點到指定成員間的字節數。
標準庫

/****************************************
 * using_offsetof.c                     *
 *                                      *
 * C語言的seddef.h中的offsetof宏        *
 ****************************************/

#include <stdio.h>
#include <stddef.h>

struct Test
{
  char a;
  int b;
  float c;
};

int main()
{
  printf("a位於結構體類型的%lu字節處\n", offsetof(struct Test, a));
  printf("b位於結構體類型的%lu字節處\n", offsetof(struct Test, b));
  printf("c位於結構體類型的%lu字節處\n", offsetof(struct Test, c));

  return 0;
}

offsetof的使用示例

參考文獻

  1. K.N. King 著,呂秀峯 譯. C語言程序設計-現代方法. 人民郵電出版社
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章