以雙下劃線開頭的標識符爲reserved in C。爲什麼在宏中使用保留名稱(以_開頭)?
那麼爲什麼我在代碼中看到很多這樣的標識符,如statement expressions內的Linux內核?
舉個例子,這就是container_of
宏:
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) *__mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type,member));})
爲什麼臨時值有叫__mptr
這將是一個保留的名字嗎?爲什麼不只是mptr
?
這意味着我仍然不應該在宏中使用雙下劃線來表示我自己的代碼,對吧?操作系統使用的標識符如何與「用戶代碼」衝突?我通常不會''包含'Linux來源;) –
是的,你不應該。您可能不會包含它們,但是您包含的標準庫標題可能會這樣做。 – cyco130