You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断某个类型是否未定义?

如何判断某个类型是否未定义?

首先得明确一点: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 17:34:28