C语言中的神奇代码应用记录
活用数组定义
// build util #define BUILD_ASSERT(condition) ((void)sizeof(char[1 - 2*!(condition)])) struct some_type { uint32_t buffer[2]; }; #define PROTOCOL_SOME_SIZE (8) void test_func(void) { BUILD_ASSERT(sizeof(struct some_type) == PROTOCOL_SOME_SIZE ); }
像上面的演示代码,如果直接使用如下条件编译:
#if (sizeof(struct some_type) != PROTOCOL_SOME_SIZE) #error "size error" #endif
无论你条件是否成立,依旧很可能会报错,但是改用更上面得代码里面那种数组定义的方式来处理,它依旧是编译时的处理,但又能起到良好的断言作用,实在是妙。
如果转载,请注明出处。https://www.cnblogs.com/ssdq/