博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++ 编译时检测结构体大小的的宏定义写法
阅读量:5914 次
发布时间:2019-06-19

本文共 765 字,大约阅读时间需要 2 分钟。

一种写法:

template 
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_SIZE10 11 #ifndef CHECK_OFFSET12 #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

 

转载地址:http://jtgpx.baihongyu.com/

你可能感兴趣的文章
百会CRM:大数据和云计算引爆智能化变革
查看>>
还没升级win10?Win10免费升级只剩9天了
查看>>
智能PDU怎样帮助数据中心节能
查看>>
走向5G时代功在技术之外
查看>>
JAVA之抽象类与接口的区别
查看>>
2021年3GPP物联网标准将占蜂窝物联网无线节点出货量一半以上
查看>>
【云和恩墨大讲堂电子期刊】挑战者:Google成功的背后
查看>>
Oracle 12c的一些新等待事件
查看>>
微博已跨过“历史三峡”?
查看>>
加拿大三分之二的电力供应来自可再生能源
查看>>
AngularJS —— 使用模块组织你的代码 【已翻译100%】(2/3)
查看>>
android.support.v7.widget.SwitchCompat
查看>>
白话composer的简单使用
查看>>
SPI机制与策略模式
查看>>
使用 Docker 和 Traefik 搭建 GitLab (前篇)
查看>>
如何让mysql索引更快一点
查看>>
免费logo创建器launchaco
查看>>
从拥挤的兔子到伪随机数算法
查看>>
随便写写
查看>>
kotlin 中 Collection 相关操作
查看>>