我无法理解此#define语句的用途

时间:2019-01-10 18:23:46

标签: c

我在https://4coder.handmade.network/static/media/file/4coder/fcpp-lexer-1.1.zip中浏览了一个C源文件(4cpp_lexer_types.h),发现以下代码,无法理解其用途/优点。

#define ENUM(type,name) typedef type name; enum name##_
ENUM(uint32_t, Cpp_Token_Type){
    CPP_TOKEN_JUNK = 0,
    CPP_TOKEN_COMMENT = 1,
    .
    .
    .
};

从#define中,我可以推断出该后期预处理的代码看起来像这样。

typedef uint32_t Cpp_Token_Type; enum Cpp_Token_Type_{
    CPP_TOKEN_JUNK = 0,
    CPP_TOKEN_COMMENT = 1,
    .
    .
    .
};

为什么不像下面那样简单地 typedef 枚举

typedef enum {
    CPP_TOKEN_JUNK = 0,
    CPP_TOKEN_COMMENT = 1,
    .
    .
    .
}Cpp_Token_Type;

我两种情况的用法都相同:

Cpp_Token_Type t = CPP_TOKEN_JUNK;

所以我的问题是为什么这样做,这是针对某些特定结果的一些标准做法吗?

1 个答案:

答案 0 :(得分:3)

在原始代码中,setupFiles: ['<rootDir>/src/test/globals-test.ts']Cpp_Token_Type,而在简化中,uint32_tCpp_Token_Type类型。如果要创建类型为enum的变量,则在两种情况下其行为将完全不同。例如,在您的示例中,Cpp_Token_Type已使用您的定义签名,而原始签名未签名。

相关问题