你知道我为什么从这段代码中得到这些错误吗?
#define container_of(ptr, type, member) ({\
const typeof( ((type *)0)->member ) *__mptr = (ptr);\
(type *)( (void *) ( (char *)__mptr - offsetof(type,member) ) );})
错误:预期的声明说明符或“......”之前的'('标记
错误:'__ mptr'unclaclared(首次在此函数中使用)
答案 0 :(得分:1)
感谢您的帮助!
更换' typeof'通过每侧有两个下划线的类型解决了这个问题。
答案 1 :(得分:1)
“typeof”是GCC扩展名https://gcc.gnu.org/onlinedocs/gcc/Typeof.html
要使用它,需要使用-std = gnu11编译器选项指定GCC标准。
答案 2 :(得分:0)
也许你可以用这个代替宏:
#define container_of(ptr, type, member) \
((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))
我想在你的宏中使用parantheses的方式是问题的原因。