我在閱讀linux源代碼時發現了一些奇怪的語法。 的container_of宏看起來像c中的奇怪宏,使用多條語句
#define container_of(ptr, type, member) ({ \
const typeof(((type *)0)->member) *__mptr = (ptr); \
(type *)((char *)__mptr - offsetof(type,member));})
什麼困惑我是喜歡的語法({語句1;語句2;})
我試着像
int a = {1;2;};
我用gcc編譯它的一些簡單的代碼。運行後,'a'似乎是2.但它不能用Microsoft VC++編譯。這個語法是gcc的擴展功能嗎?如果是這樣,我怎樣才能獲得相同的效果沒有gcc擴展,如定義多個語句並通過使用宏返回一個值?
**你爲什麼要問** Linux內核需要'gcc'(或者一個非常兼容的編譯器,比如* TinyCC *或LLVM/Clang *的最新版本)才能被編譯。 –