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

C語言關鍵字深度解析(二):goto、void、const、volatile 等

     編輯:關於C語言

C語言核心關鍵字用法與最佳實踐(下)

接上篇,詳細講解 goto、void、return、const、volatile、extern、struct、union、enum、typedef 十大關鍵字。

10. goto —— 慎用的無條件跳轉

「代碼質量與 goto 使用次數成反比」—— 建議禁用,改用結構化控制流。

11. void —— 「無類型」的多面手

場景用法示例
無返回值函數修飾返回類型void func();
無參數函數參數列表int func(void);
通用指針void* 接收任意指針void* ptr = &x;
指針運算限制不可直接算術void* p; p++ // 錯誤

注意:void 不能定義實際變量。

12. return —— 函數返回控制

  • 終止函數並返回值:return (expr); 括號可省略
  • 多條 return 僅一條執行
  • 禁忌:不可返回棧內存指針(函數結束時銷毀)

13. const —— 常量與只讀語義

核心規則

  1. 定義時必須初始化
  2. 編譯器常放入符號表,不分配內存,效率高
  3. const int i = 2; 等價 int const i = 2;

指針組合完全圖解

const int *p;       // p可變,*p不可變(指向常量的指針)
int const *p;       // 同上
int *const p;       // p不可變,*p可變(常量指針)
const int *const p; // p與*p均不可變

函數參數/返回值

  • 參數:void func(const int x); 防止誤修改
  • 返回值:const int func(); 返回值不可修改
  • 跨文件聲明:extern const int i;(不可賦值)

14. volatile —— 「易變」類型修飾符

告訴編譯器:該變量可能被未知因素(硬件、中斷、其他線程)修改,禁止優化,每次必須從內存讀取。

volatile int flag;  // 硬件寄存器、共享標誌位
volatile int *ptr;  // 指向易變內存的指針

15. extern —— 外部鏈接聲明

聲明而非定義,告訴編譯器符號在別處定義:

// a.c
int global = 10;

// b.c
extern int global;  // 使用 a.c 定義的 global

16. struct —— 結構體

  • 打包相關數據,成員按聲明順序佈局
  • 對齊規則:成員地址為其大小倍數,總大小為最大成員大小倍數
  • 柔性數組:C99 允許結構體末尾定義 int arr[];,配合 malloc 實現變長結構

17. union —— 共用體

  • 所有成員共享同一塊內存,大小 = 最大成員大小
  • 同一時刻只能存儲一個成員值
  • 典型用途:類型轉換、節省內存、硬件寄存器映射

18. enum —— 枚舉類型

特性enum#define
處理階段編譯期預編譯期
調試可見性可見不可見
批量定義一次定義多個每次一個
類型安全有無

19. typedef —— 類型別名

關鍵區別:typedef 創建新類型名,參與類型系統;#define 純文本替換。

#define INT32 int
typedef int int32;

unsigned INT32 x = 10;   // 合法:展開為 unsigned int
unsigned int32 y = 10;   // 錯誤:int32 不能與 unsigned 組合

最佳實踐:優先使用 typedef,配合 stdint.h 固定寬度類型(int32_t 等)。

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