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

C 語言關鍵字完整速查表:含義、用法與最佳實踐

     編輯:關於C語言

前言

C 標準定義 32 個關鍵字(C99 增加 5 個,C11 再增 7 個)。本文按功能分類,逐一解析含義、典型用法及易錯點,作為開發時的快速參考。

1. 數據類型關鍵字 (12)

關鍵字說明典型大小/範圍
int基本整型至少 16 位,通常 32 位
short短整型至少 16 位
long長整型至少 32 位
long long長長整型 (C99)至少 64 位
signed有符號修飾默認
unsigned無符號修飾擴大正數範圍
char字符型/字節8 位(實現定義符號性)
float單精度浮點IEEE 754 binary32
double雙精度浮點IEEE 754 binary64
long double擴展精度浮點≥ double
void空類型無值、泛型指針
_Bool / bool布爾類型 (C99, 需 <stdbool.h>)0/1

提示:使用 stdint.h 定義的精確寬度類型(int32_t, uint64_t 等)提高可移植性。

2. 類型修飾與聲明 (6)

關鍵字作用關鍵點
const只讀限定修飾指針時區分 const int* vs int* const;函數參數傳指針常用
volatile易變限定防止編譯器優化掉對內存/寄存器的訪問;用於硬件寄存器、信號處理、多線程標志
restrict無別名提示 (C99)告訴編譯器該指針是訪問對象的唯一路徑,允許積極優化
static靜態存儲/內部鏈接局部變量保持值;全局/函數限制本文件可見
extern外部聲明聲明而非定義;跨文件共享變量/函數
register寄存器建議現代編譯器自動優化,基本忽略;不可取地址

3. 控制流關鍵字 (12)

關鍵字用法示例注意事項
if / elseif (cond) stmt; else stmt;懸掛 else 原則:與最近的 if 配對
switch / case / defaultswitch (expr) { case const: ... default: ... }case 標簽為常量表達式;無 break 會貫穿
forfor (init; cond; inc) stmt;三部分均可為空;C99 允許聲明變量
whilewhile (cond) stmt;先判斷後執行
do / whiledo stmt; while (cond);至少執行一次
break跳出最近循環或 switch不影響 if/else
continue跳過本輪循環餘下部分僅用於循環
gotogoto label; ... label: stmt;慎用;可用於多層循環跳出、錯誤處理統一出口
returnreturn [expr];非 void 函數所有路徑必須返回值

4. 複合類型與對齊 (4)

關鍵字說明
struct結構體,成員順序佈局,大小受對齊影響
union共用體,成員共享內存,大小等於最大成員
enum枚舉類型,命名整型常量集合,兼容 int
typedef類型別名,不創建新類型,增強可讀性與可移植性

5. 內存與對齊 (3)

關鍵字說明
sizeof編譯時運算符,返回類型/表達式大小(字節),括號可省略當操作數為變量
_Alignas / alignas對齊規定 (C11),指定變量/類型對齊要求
_Alignof / alignof對齊查詢 (C11),返回類型/表達式對齊要求

6. C11 新增關鍵字 (7)

  • _Generic:泛型選擇,編譯時根據類型選擇表達式,實現類似重載。
  • _Static_assert / static_assert:編譯期斷言。
  • _Thread_local / thread_local:線程局部存儲。
  • _Noreturn / noreturn:標記函數不返回(如 exit、abort)。
  • _Atomic / atomic:原子類型(需 <stdatomic.h>)。

7. 保留關鍵字 (不可作標識符)

以雙下劃線開頭或下劃線+大寫字母開頭的標識符保留給實現使用(如 __func__, _Alignas)。

速查建議

  1. 優先使用 const、static 限制可見範圍與可修改性。
  2. 避免 goto、register,現代編譯器更優秀。
  3. 跨文件共享變量:.c 定義,.h 用 extern 聲明。
  4. 硬件/並發相關變量必加 volatile(配合原子操作/鎖)。
  5. 使用 stdint.h 精確類型,stdbool.h 布爾類型。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved