宏定義中的反斜槓"\"和宏定義的細節說明

 

在閱讀C語言代碼經常可以看到代碼中出現反斜槓"\",不是很明白它的意思,遂對反斜槓"\"的意義和用法進行查詢和總結記錄。

1. 轉義字符

非常常用的一種用法,在反斜槓後面加一個字符,表示一些特定的意思,如:

\n 換行符(LF)

\r 回車(CR) ,相當於鍵盤上的"Enter"

\t 跳到下一個TAB位置

\0 空字符(NULL)

\' 單引號(撇號)

\" 雙引號

\\ 代表一個反斜線字符''\' 等,詳細可百度“轉義字符”。

例:

a.

printf("Hello World!");

printf("Hello World!");

輸出:

Hello World!Hello World!

b.

printf("Hello World!\n");

printf("Hello World!\n");

輸出:

Hello World!

Hello World!

2. 繼續符

可用於一行的結尾,表示本行與下一行連接起來

C語言中以 ; 作爲語句的結束,不以行爲單位結束,當一行的內容太長不方便卸載一行時可使用反斜 槓"\"作爲繼續符

例如:STM32官方庫文件"stm32f30x_usart.h"有如下一段:

#define IS_USART_123_PERIPH(PERIPH) (((PERIPH) == USART1) || \

((PERIPH) == USART2) || \

((PERIPH) == USART3))

寫成一行意義完全相同:

#define IS_USART_123_PERIPH(PERIPH) (((PERIPH) == USART1) || ((PERIPH) == USART2) || ((PERIPH) == USART3))

(因爲顯示問題爲兩行,實際應該爲一行)

 

3 宏定義的細節

(1)對於有參數的宏定義,宏定義時,在宏名與帶參數的括號之間不應加空格,否則將空格以後的字符都作爲替代字符串的一部分。

(2)帶參數的宏定義只是進行簡單的字符替換,宏展開則是在編譯前進行的,在展開時並不分配內存單元,不進行值得傳遞處理,因此替換不會佔用運行時間,只佔用編譯時間。

(3)宏不存在類型問題,宏名無類型,宏的參數也無類型,只是一個符號代表,展開時代入指定的字符串即可,宏定義時,字符串可以是任何類型的數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章