2016-01-25 25 views
3

我讀PX4代碼時,看到了一個電話,可以將兩個由空格分隔的字符串傳遞給一個函數嗎?需要說明

open(ACCEL_BASE_DEVICE_PATH "0", O_RDONLY) 

其中,#define ACCEL_BASE_DEVICE_PATH "/dev/accel"

所以,open("/dev/accel" "0", O_RDONLY)

是這甚至可能嗎? "/dev/accel" "0"

我期待有可能被預處理宏 ......但是,這將很難找到..

+0

@ Jarod42感謝清理 – TooGeeky

+0

看看[這個鏈接](http://programmers.stackexchange.com/questions/254984/on-concatenating-adjacent-string-literals)一個有趣的歷史課/理由爲什麼這是支持 –

回答

7

連續字符串文字是由預處理器連接起來。 這是合法的。

"/dev/accel" "0"結果在"/dev/accel0"

請注意,這裏空間不相關(但更具可讀性),這與"/dev/accel""0"相同。

還要注意的是,在C + + 11,因爲用戶定義的文本(UDL)的,空間可以被有時需要作爲

#define ZERO "0" 
"/dev/accel"ZERO // Here space is require since C++11. else there is an other meaning. 
+0

蓋伊自稱在大學教C不知道當我在一個家庭作業項目中做到這一點時,試圖標記我錯誤:p –

+1

(C99,6.4.5p5)「在翻譯階段6中,多字節字符序列由任何相鄰字符序列和相同的前綴str將文字標記連接成單個多字節字符序列。「 – TooGeeky

相關問題