[問題] 於編譯期檢查結構體大小, 若違反停止編譯

作者: 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