#define error:预期的声明说明符或'''''之前的'...'

时间:2014-11-20 00:27:29

标签: c compiler-errors c-preprocessor

你知道我为什么从这段代码中得到这些错误吗?

#define container_of(ptr, type, member) ({\
    const typeof( ((type *)0)->member ) *__mptr = (ptr);\
    (type *)( (void *) ( (char *)__mptr - offsetof(type,member) ) );})
  

错误:预期的声明说明符或“......”之前的'('标记
  错误:'__ mptr'unclaclared(首次在此函数中使用)

3 个答案:

答案 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的方式是问题的原因。