发现一个有趣的c编译器特性:
struct unknown *my_t1;
my_t1 = (struct unknown *)0xffff111;
struct unknown 在任何地方都没有声名,但以上语句,c编译器不会报错。因为只是一个指针的赋值,不需要具体类型。
但如果这样 : *my_t1 = 1
就会报一下错误。
src/cc.c:169:2: error: dereferencing pointer to incomplete type 'struct unknown'
因为这和指针赋值不一样,即使没有具体类型,编译器也可以搞定指针赋值,但*的赋值就必须要具体类型了,所以就报错了。