[问题] 于编译期检查结构体大小, 若违反停止编译

楼主: chrisdar   2014-08-27 22:51:59
[问题] 于编译期检查结构体大小, 若违反停止编译
http://www.virtualbox.org/svn/vbox/trunk/src/VBox/Devices/PC/ipxe/src/include/ipxe/efi/Base.h
http://goo.gl/wZY49k
我在上面的网址发现一个有趣的解法
#define VERIFY_SIZE_OF(TYPE, Size) \
extern UINT8 _VerifySizeof##TYPE[ \
(sizeof(TYPE) == (Size)) / (sizeof(TYPE) == (Size)) \
]
VERIFY_SIZE_OF (BOOLEAN, 1);
我将其稍微简化如下:
#define VERIFY_CONDITION(condition) \
extern char _VerifyCondition##__LINE__[ \
(condition) / (condition) \
]
VERIFY_CONDITION (sizeof(BOOLEAN) == 1);
各位是否见过更有趣的解法?
作者: LiloHuang (十年一刻)   2014-08-27 22:59:00
常见的 Static assertions 做法 http://goo.gl/anSa2g
作者: CaptainH (Cannon)   2014-08-27 22:59:00
在没有 static_assert 之前常常这么做
作者: Killercat (杀人猫™)   2014-08-28 00:19:00
#1IrElygp 这边有modern c++ design的做法 要修改一下主要就是把原来的0改成负值即可

Links booklink

Contact Us: admin [ a t ] ucptt.com