2013-11-04 70 views
10

在宏聲明,如:開啓括號後的反斜槓是什麼意思?

#define WAIT_SPI2_TRANSMISSON_END() {while ((SPI2_SR & SPI_SR_TXCTR_MASK) != 0) {\ 
            if(SPI2_SR & SPI_SR_RFDF_MASK) {\ 
             (void)SPI2_POPR;\ 
             SPI2_SR |= SPI_SR_RFDF_MASK ;\ 
            }}\ 

做這些反斜槓(\)平均或做呢?

回答

13

這是一個續行字符。

應該沒有其他任何東西(除了行尾字符之外),包括空格。

它對宏更加有用,因爲它增加了清晰度。

(非常,非常偶然 - 尤其是在舊的代碼 - 你會看到三字符序列??/代替\這些天,雖然它更多的面試陷阱的問題的。)

3

這意味着define語句會遍歷多行。

6

它是如此稱爲續行。這意味着你的生產線將繼續沿用。如果以這種方式編寫,閱讀內容有時候會更簡單。

順便說一句 - 在預處理器傳遞過程中,續行是「膠合的」。

這裏閱讀有關步驟#3:gcc docs

摘錄:

/\ 
* 
*/ # /* 
*/ defi\ 
ne FO\ 
O 10\ 
20 

等同於:

#define FOO 1020 

值得注意地說,繼續行沒有使用在預處理器宏內。這是完全合法的,上面寫着這樣的:

f\ 
lo\ 
at f = 5.0; 

這是一樣的:

float f = 5.0; 
7

的斜線被用來製造線以下年底非斷行的預處理。 A #define對於預處理器必須只有一行。爲了增加可讀性,您可以在行尾之前使用反斜槓。預處理器將首先清除以反斜槓開頭的任何換行符,然後纔會解析#define。所以,當你看到多條線時,PP只會看到一條線。

相關問題