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 );
}
View Code

像上面的演示代码,如果直接使用如下条件编译:

#if (sizeof(struct some_type) != PROTOCOL_SOME_SIZE)
#error "size error"
#endif

无论你条件是否成立,依旧很可能会报错,但是改用更上面得代码里面那种数组定义的方式来处理,它依旧是编译时的处理,但又能起到良好的断言作用,实在是妙。

 

posted @ 2022-11-14 16:01  -ssdq-  阅读(38)  评论(0编辑  收藏  举报