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

C語言預處理指令與註解完整指南

     編輯:C 語言基礎

C 語言預處理程式

C 程式原始碼中可包含各種編譯指令,稱為預處理命令。雖然它們不是 C 語言核心的一部分,但擴展了程式設計環境。ANSI 標準定義的預處理命令包括:

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

所有預處理命令均以 # 開頭。

#define 宏定義

定義一個標識符及其替換字串。一般形式:#define identifier string(無分號)。

#define TRUE 1
#define FALSE 0
#define PI 3.14159
#define MAX_SIZE 100

宏名可用於其他宏定義中:

#define ONE 1
#define TWO ONE+ONE
#define THREE ONE+TWO

帶參數的宏(類函數宏):

#define MIN(a,b) ((a)<(b)?(a):(b))

優點:避免函數調用開銷,提高速度。缺點:重複編碼增加程式長度,需注意副作用(如 MIN(x++, y) 會導致 x 增加兩次)。

#error 強制編譯錯誤

用於程式除錯,強制編譯器停止並顯示錯誤訊息。

#include 檔案包含

#include "stdio.h"   // 先搜尋當前目錄,再搜尋標準目錄
#include <stdio.h>   // 僅搜尋標準目錄

支援嵌套包含,嵌套層數視實作而定。

條件編譯

#if、#else、#elif、#endif

根據常量表達式的真偽決定是否編譯特定程式碼區塊。表達式必須為常量,不能包含變數或 sizeof。

#define MAX 100
#if MAX > 99
    printf("Large array\n");
#else
    printf("Small array\n");
#endif

#ifdef 與 #ifndef

#ifdef MACRO:若宏已定義則編譯後續程式碼。
#ifndef MACRO:若宏未定義則編譯後續程式碼。
常用於防止頭檔案重複包含:

#ifndef HEADER_H
#define HEADER_H
// 頭檔案內容
#endif

#undef 取消宏定義

取消先前定義的宏,將其作用域限制在特定程式碼段:

#define LEN 100
#define WIDTH 100
char array[LEN][WIDTH];
#undef LEN
#undef WIDTH
// 此處 LEN 與 WIDTH 已無定義

#line 改變行號與檔案名

改變 __LINE__ 與 __FILE__ 預定義宏的值,主要用於除錯:

#line 100 "custom.c"
printf("%d\n", __LINE__); // 輸出 102

#pragma 實作相關指令

向編譯器傳遞特定指令(如啟用/停用警告、指定對齊方式等),各編譯器支援不同。

ANSI 預定義宏

  • __LINE__:當前行號
  • __FILE__:當前檔案名
  • __DATE__:編譯日期("Mmm dd yyyy")
  • __TIME__:編譯時間("hh:mm:ss")
  • __STDC__:標準編譯器為 1,否則為其他值

C 語言註解

註解以 /* 開始,以 */ 結束,不可嵌套。編譯器會忽略註解內容。

/* 這是合法的註解 */
printf("hello"); /* 行尾註解 */
x = 10 + /* 運算式中註解 */ 5; // 合法但不建議

注意事項:

  • 註解不能出現在關鍵字或標識符中間(如 swi/*comment*/tch 非法)
  • 註解不可嵌套,內層 /* */ 會導致編譯錯誤
  • 良好的註解應簡明扼要,說明函數功能、參數、返回值等
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved