美文网首页
编译时检查sizeof

编译时检查sizeof

作者: 柯蒂斯罗西 | 来源:发表于2018-07-08 21:46 被阅读0次

    需求:在编译时检查struct数据结构的大小

    思路a:预编译时检测,不一定支持sizeof,且数据结构类型未知。

    思路b:运行时检测,效率问题。

    思路c:在编译时检测。


    编译时检测

    Linux内核(在include/linux/kernel.h)里面已经有相关的macro解决这个问题。

    #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))

    我们可以改装此宏定义:

    #define BUILD_BUG_ON(condition) ((void)sizeof(char[condition? 1:-1])) 

    具体的原理是:(void)1,这个语句即使使用了 -Wall的编译参数,也不会有警告;

    因此,BUILD_BUIG_ON这个宏展开后等效于

    (void)sizeof(char[1])

    (void)sizeof(char[-1])

    相关文章

      网友评论

          本文标题:编译时检查sizeof

          本文链接:https://www.haomeiwen.com/subject/iicauftx.html