c++ 编译时检测结构体大小的的宏定义写法
一种写法:
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++ 编译时检测结构体大小的的宏定义写法相关推荐
- 利用宏定义在编译阶段检查结构体大小的方法
http://blog.csdn.net/crazycoder8848/article/details/8292770 ======================================== ...
- 【转】彻底搞清计算结构体大小和数据对齐原则
数据对齐: 许多计算机系统对基本数据类型合法地址做出了一些限制,要求某种类型对象的地址必须是 某个值K(通常是2,4或8)的倍数.这种对齐限制简化了形成处理器和存储器系统之间的接口的硬件 设计.例如, ...
- 【C语言进阶深度学习记录】二十 结构体大小计算与结构体内存布局的详细方法
结构体大小的计算往往是面试笔试常考的知识.对于简单的结构体,可以一眼看出来,对于复杂的结构体,该如何计算结构体占用内存的大小呢? 本文学习所使用的编译器是gcc 4.4.5 使用其他编译器或者使用Wi ...
- C语言结构体大小及对齐问题 · 续
写在前面: 本文章旨在总结备份.方便以后查询,由于是个人总结,如有不对,欢迎指正:另外,内容大部分来自网络.书籍.和各类手册,如若侵权请告知,马上删帖致歉. 在之前的 C语言结构体大小及对齐问题 文章 ...
- C语言结构体详解(结构体定义,使用,结构体大小等)
c语言结构体详解 1.c语言结构体 1.1 结构体基础知识 1.2 结构体声明 1.3 结构体特殊声明 1.4 结构体的自引用 1.5 结构体的大小的计算 1.5.1了解结构体大小计算规则 1.5.2 ...
- 结构体大小如何计算?
以下内容摘自此处: 作者:太平小小草 链接:https://www.jianshu.com/p/e772fff47465 来源:简书 结构体大小计算有三个原则: 一,结构体变量的首地址,必须是结构体 ...
- 结构体大小计算与位域大小计算
结构体大小计算与位域大小计算 本博文纯属个人理解,有错误请多指正. 首先,各个变量所占的字节: 类型 字节(64位) 字节(32位) char 1 1 unsigned char 1 1 short ...
- 结构体大小的计算 用最简单的方法,通俗易懂的方法计算结构体大小
结构体计算要遵循字节对齐原则 结构体默认的字节对齐一般满足三个准则: 1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除: 2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是 ...
- 结构体大小之嵌套结构体的长度计算
计算嵌套结构体的长度需要掌握一般结构体的计算方法,这篇文章是我看的中写的不错的,但是他嵌套结构体的计算写的不太好,在他的基础上进行一些改进: https://blog.csdn.net/qq_1932 ...
最新文章
- python urlretrieve登录下载_使用python urlretrieve下载文件
- 应用中验证码的生成方法.
- java中sum=a+aa+aaa_Java面向对象基础IO系统
- 如何自学python数据分析-Python学习干货 |如何用Python进行数据分析?
- 构造数独 算法及代码实现
- c#+handle.exe实现升级程序在运行时自动解除文件被占用的问题
- docker 中文文档_Kubernetes将弃用Docker,不必恐慌
- 【科研】施一公:我有6个办法提高英文科研写作能力
- activity多实例任务加签
- 日本外贸市场开发攻略
- dwcs6 mysql站点_在Dreamweaver CS6中如何新建站点的方法
- GCN使用的数据集Cora、Citeseer、Pubmed、Tox21格式
- 关于当前安全设置不允许下载文件问题的解决
- 存储服务器在监控中的作用,监控项目中存储服务器IPSAN云存储方案的优劣势对比...
- matlab 使用fprintf打印度数符号
- 未来的量子计算机模型,量子计算机上量子人工生命模型
- Three.js加载动画模型并控制播放
- 使用HTML的canvas,给表格画斜线
- 基于html5的数据可视化实现方法研究,基于HTML5的数据可视化实现方法研究
- 【金猿产品展】拍乐云——新一代实时音视频云服务,构建云上的每一次美好互动...
热门文章
- VMware Linux 下 Nginx 安装配置 (一)
- ES6——扩展运算符/三点运算符(...)
- ES6学习(八)—Promise对象 超鸡重要
- 联想340c笔记本cpu能升级吗_高性价比十大笔记本电脑(由高到低价格),有一台五五开也有.........
- TCP/IP参考模型、五层参考模型
- 利用Navicat Premium将SQL Server数据库转为My SQL数据库(解决Mac无法打开SQL Server 脚本文件的方法)
- 买手机,是不是运行内存大,手机用久了也不卡?
- 理财非保本浮动收益型什么意思?
- 宇宙大爆炸是不是一个黑洞的大爆炸?
- 65寸的液晶电视是挂在墙上好还是放在电视柜上好?