摆脱一个特定案例的演员对齐警告

时间:2016-09-07 19:52:05

标签: gcc embedded

我在arm上使用了container_of的这个实现:

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

问题是,即使向此实现添加(void *)强制转换也不会删除-Wcast-align警告。我真的不想把它关掉,因为它在这个特定情况下失败了,实际上它确实没问题。 (问题是转换为char *然后键入*更改类型的对齐。之前使用的解决方案是首先转换为void *然后键入*作为告诉编译器它是故意的方式 - 但是这个解决方案在gcc版本4.8.3(OpenWrt / Linaro GCC 4.8-2014.04 r48666)上对我不起作用

有没有办法告诉编译器只允许这个演员?

0 个答案:

没有答案