一种写法:

template <bool>
struct CompileAssert {};#define COMPILE_ASSERT(expr, msg) \typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]} //endof namespace

第二种写法:  

 1 #define CAT_TOKEN_1(t1,t2) t1##t2
 2 #define CAT_TOKEN(t1,t2) CAT_TOKEN_1(t1,t2)
 3
 4 #define COMPILE_ASSERT(x)  \
 5                     enum {CAT_TOKEN (comp_assert_at_line_, __LINE__) = 1 / !!(x) };
 6
 7 #ifndef CHECK_SIZE
 8 #define CHECK_SIZE(type, size) extern int sizeof_##type##_is_##size [!!(sizeof(type)==(size_t)size) - 1]
 9 #endif//CHECK_SIZE
10
11 #ifndef CHECK_OFFSET
12 #define CHECK_OFFSET(type, member, value) \
13         extern int offset_of_##member##_in_##type##_is_##value \
14     [!!(__builtin_offsetof(type,member)==((size_t)(value))) - 1]
15 #endif//CHECK_OFFSET

转载于:https://www.cnblogs.com/jhj117/p/6346845.html

c++ 编译时检测结构体大小的的宏定义写法相关推荐

  1. 利用宏定义在编译阶段检查结构体大小的方法

    http://blog.csdn.net/crazycoder8848/article/details/8292770 ======================================== ...

  2. 【转】彻底搞清计算结构体大小和数据对齐原则

    数据对齐: 许多计算机系统对基本数据类型合法地址做出了一些限制,要求某种类型对象的地址必须是 某个值K(通常是2,4或8)的倍数.这种对齐限制简化了形成处理器和存储器系统之间的接口的硬件 设计.例如, ...

  3. 【C语言进阶深度学习记录】二十 结构体大小计算与结构体内存布局的详细方法

    结构体大小的计算往往是面试笔试常考的知识.对于简单的结构体,可以一眼看出来,对于复杂的结构体,该如何计算结构体占用内存的大小呢? 本文学习所使用的编译器是gcc 4.4.5 使用其他编译器或者使用Wi ...

  4. C语言结构体大小及对齐问题 · 续

    写在前面: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. 在之前的 C语言结构体大小及对齐问题 文章 ...

  5. C语言结构体详解(结构体定义,使用,结构体大小等)

    c语言结构体详解 1.c语言结构体 1.1 结构体基础知识 1.2 结构体声明 1.3 结构体特殊声明 1.4 结构体的自引用 1.5 结构体的大小的计算 1.5.1了解结构体大小计算规则 1.5.2 ...

  6. 结构体大小如何计算?

    以下内容摘自此处: 作者:太平小小草 链接:https://www.jianshu.com/p/e772fff47465 来源:简书 结构体大小计算有三个原则: 一,结构体变量的首地址,必须是结构体 ...

  7. 结构体大小计算与位域大小计算

    结构体大小计算与位域大小计算 本博文纯属个人理解,有错误请多指正. 首先,各个变量所占的字节: 类型 字节(64位) 字节(32位) char 1 1 unsigned char 1 1 short ...

  8. 结构体大小的计算 用最简单的方法,通俗易懂的方法计算结构体大小

    结构体计算要遵循字节对齐原则 结构体默认的字节对齐一般满足三个准则: 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除: 2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是 ...

  9. 结构体大小之嵌套结构体的长度计算

    计算嵌套结构体的长度需要掌握一般结构体的计算方法,这篇文章是我看的中写的不错的,但是他嵌套结构体的计算写的不太好,在他的基础上进行一些改进: https://blog.csdn.net/qq_1932 ...

最新文章

  1. python urlretrieve登录下载_使用python urlretrieve下载文件
  2. 应用中验证码的生成方法.
  3. java中sum=a+aa+aaa_Java面向对象基础IO系统
  4. 如何自学python数据分析-Python学习干货 |如何用Python进行数据分析?
  5. 构造数独 算法及代码实现
  6. c#+handle.exe实现升级程序在运行时自动解除文件被占用的问题
  7. docker 中文文档_Kubernetes将弃用Docker,不必恐慌
  8. 【科研】施一公:我有6个办法提高英文科研写作能力
  9. activity多实例任务加签
  10. 日本外贸市场开发攻略
  11. dwcs6 mysql站点_在Dreamweaver CS6中如何新建站点的方法
  12. GCN使用的数据集Cora、Citeseer、Pubmed、Tox21格式
  13. 关于当前安全设置不允许下载文件问题的解决
  14. 存储服务器在监控中的作用,监控项目中存储服务器IPSAN云存储方案的优劣势对比...
  15. matlab 使用fprintf打印度数符号
  16. 未来的量子计算机模型,量子计算机上量子人工生命模型
  17. Three.js加载动画模型并控制播放
  18. 使用HTML的canvas,给表格画斜线
  19. 基于html5的数据可视化实现方法研究,基于HTML5的数据可视化实现方法研究
  20. 【金猿产品展】拍乐云——新一代实时音视频云服务,构建云上的每一次美好互动...

热门文章

  1. VMware Linux 下 Nginx 安装配置 (一)
  2. ES6——扩展运算符/三点运算符(...)
  3. ES6学习(八)—Promise对象 超鸡重要
  4. 联想340c笔记本cpu能升级吗_高性价比十大笔记本电脑(由高到低价格),有一台五五开也有.........
  5. TCP/IP参考模型、五层参考模型
  6. 利用Navicat Premium将SQL Server数据库转为My SQL数据库(解决Mac无法打开SQL Server 脚本文件的方法)
  7. 买手机,是不是运行内存大,手机用久了也不卡?
  8. 理财非保本浮动收益型什么意思?
  9. 宇宙大爆炸是不是一个黑洞的大爆炸?
  10. 65寸的液晶电视是挂在墙上好还是放在电视柜上好?