首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言核心知識體系總結:從基礎類型到系統調用深度筆記

     編輯:關於C語言

數據類型完整體系

分類關鍵字/構造說明
基本類型整數:char/short/int/long (signed/unsigned)
浮點:float/double/long double
算術類型,直接映射硬件
枚舉類型enum Type { VAL1, VAL2... }命名整數常量集,增強可讀性
Void 類型void僅用於函數返回/參數,不可定義變量
派生類型指針、數組、結構體、聯合體、函數類型由基本類型組合構造

關鍵區別:結構體成員併存(佔用總大小),聯合體成員互斥(佔用最大成員大小),共用內存實現類型懲罰或節省空間。

核心語法要素速查

運算符優先級與結合性

  • 算術:() [] -> . ++ -- (高) → * / % + - << >> < <= > >= == != & ^ | && || ?: = += -= *= /= %= &= ^= |= <<= >>= (低)
  • 賦值、條件運算符右結合,其餘左結合

控制流語句

// 分支
if (cond) { } else if (cond) { } else { }
switch (expr) { case const: ... default: }

// 循環
while (cond) { }
do { } while (cond);
for (init; cond; step) { }
break; continue; // 循環控制

預處理指令

#include #define #undef
#ifdef #ifndef #if #elif #else #endif
#error #pragma

標準庫深度解析

核心頭文件功能映射

頭文件核心功能常用函數/宏
<stdio.h>標準輸入輸出fopen/fclose/fread/fwrite/printf/scanf
<stdlib.h>通用工具malloc/free/atoi/atof/exit/abort/getenv
<string.h>字符串/內存操作strcpy/strcat/strlen/memcpy/memcmp
<math.h>數學運算sin/cos/sqrt/pow/fabs/exp/log
<time.h>時間日期time/localtime/strftime/clock
<assert.h>斷言調試assert(expr)
<stdarg.h>可變參數va_start/va_arg/va_end

庫實現機制:以 time() 為例

Windows (MSVC):
time.inl 內聯函數 → _time32() → GetSystemTimeAsFileTime() (系統調用) → 換算為 Unix 時間戳

Linux (glibc):
time() → gettimeofday() (系統調用) → 返回 tv_sec

核心洞察:標準庫是抽象層,屏蔽平台差異;編譯器廠商負責用系統調用實現標準庫,應用開發者只需依賴標準接口。

編譯鏈接與運行時全景

  1. 預處理:展開宏、包含頭文件、條件編譯
  2. 編譯:源碼 → 汇編代碼
  3. 組裝:汇編 → 目標文件 (.obj/.o)
  4. 鏈接:目標文件 + 庫 → 可執行文件
    靜態鏈接:庫代碼嵌入可執行文件
    動態鏈接:運行時加載 .dll/.so
  5. 加載運行:OS 創建進程虛擬地址空間,映射可執行文件與動態庫,設置棧/堆,調用入口點 (mainCRTStartup → main)

系統調用與標準庫關係圖譜

應用代碼
    │ 調用標準庫 API (printf, malloc, fopen)
    ▼
標準庫實現 (glibc / MSVC CRT)
    │ 封裝系統調用
    ▼
操作系統內核
    │ 硬件抽象層 (HAL)
    ▼
物理硬件 (CPU/內存/磁盤/網卡)

標準庫消除平台差異,提供統一編程體驗;系統調用是 OS 提供的特權接口,標準庫實現負責適配特定 OS 的系統調用。

進階主題速覽

  • 靜態/動態庫:.lib/.a (靜態) vs .dll/.so (動態);#pragma comment(lib, ...) 指定鏈接庫
  • 動態加載:LoadLibrary/GetProcAddress (Windows) / dlopen/dlsym (Linux) 實現插件架構
  • 外部函數聲明:extern / extern "C" / __declspec(dllimport)
  • 入口點定制:#pragma comment(linker, "/entry:main2") 修改程序入口

這份筆記構建了從語法基礎到系統底層的完整知識脈絡,建議配合《C 專家編程》、《Windows 核心編程》、《Linux/UNIX 系統編程手冊》深化專項學習。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved