看到一段代码可以在编译期间查所在平台的类型大小是否是自己想要的大小的技术:
/** type verification section */
/**
* Helper macro to verify a size at compile time. If this fails, it will
* produce a negative subscript compiler error.
*/
#define UC_VERIFY_SIZE(type, target_size) \
typedef char __VERIFY_SIZE__##type[(sizeof(type) == (target_size)) ? 1 : -1]
/**
* If any of these macros fails it means one of the typedefs in this file
* does not match the proper size for this platform.
*/
UC_VERIFY_SIZE(uc_uint32, 4);
UC_VERIFY_SIZE(uc_sint32, 4);
UC_VERIFY_SIZE(uc_uint16, 2);
UC_VERIFY_SIZE(uc_uint8, 1);
UC_VERIFY_SIZE(uc_byte, 1);
UC_VERIFY_SIZE(uc_intptr, sizeof(void*));
UC_VERIFY_SIZE(uc_uintptr, sizeof(void*));
那个宏定义,定义了一个数组类型,数组类型的大小是又sizeof运算符和?:运算符构成的,这两个运算符因为操作的都是可以在编译期计算出来的量,因此可以在编译期完成数组类型定义,当大小并不是我们想要的时候,该数组的大小就是-1。会出现变异错误。
阅读(2851) | 评论(0) | 转发(0) |