如何判断某个类型是否未定义?
如何判断某个类型是否未定义?
首先得明确一点:C语言的预处理指令#ifndef只能用来检查宏是否未定义,没法直接针对类型(比如你用typedef定义的Type_int)做判断,所以你直接写#ifndef Type_int是行不通的,预处理阶段根本识别不了这个类型名。
不过我们可以换个思路——给每个生成的类型绑定一个对应的标记宏,通过检查这个宏来间接判断类型是否已经定义。
先看你现在的宏定义:
#define type_create(type) { \ typedef struct { \ type* ptr, \ } Type_##type; \ }
我们可以修改这个宏,在生成类型的同时,定义一个独一无二的宏标记,比如TYPE_##type_DEFINED:
#define type_create(type) \ typedef struct { \ type* ptr; /* 这里去掉了多余的逗号,避免编译报错 */ \ } Type_##type; \ #define TYPE_##type_DEFINED 1
这样一来,当你第一次调用type_create(int)时,不仅会生成Type_int类型,还会定义TYPE_int_DEFINED这个宏。之后再想检查Type_int是否存在,就可以通过检查这个宏来实现:
#ifndef TYPE_int_DEFINED type_create(int); #endif
这个思路的核心就是利用预处理阶段只能识别宏的特性,用宏作为类型存在的“标记”,间接实现你想要的“类型未定义时才生成”的逻辑。
备注:内容来源于stack exchange,提问作者theKMan747
相关产品推荐
相关产品推荐

