轉載自:http://www.wtoutiao.com/p/K6csca.html
在閱讀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)宏不存在類型問題,宏名無類型,宏的參數也無類型,只是一個符號代表,展開時代入指定的字符串即可,宏定義時,字符串可以是任何類型的數據。