我讀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"
我期待有可能被預處理宏 ......但是,這將很難找到..
我讀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"
我期待有可能被預處理宏 ......但是,這將很難找到..
連續字符串文字是由預處理器連接起來。 這是合法的。
"/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.
蓋伊自稱在大學教C不知道當我在一個家庭作業項目中做到這一點時,試圖標記我錯誤:p –
(C99,6.4.5p5)「在翻譯階段6中,多字節字符序列由任何相鄰字符序列和相同的前綴str將文字標記連接成單個多字節字符序列。「 – TooGeeky
@ Jarod42感謝清理 – TooGeeky
看看[這個鏈接](http://programmers.stackexchange.com/questions/254984/on-concatenating-adjacent-string-literals)一個有趣的歷史課/理由爲什麼這是支持 –