GCC主要数据结构之rid

本文解析了GCC编译器中使用的保留标识符及其用途。这些标识符涵盖了C、C++及Objective-C等语言的关键字,并详细说明了各种类型修饰符和其他语言特性关键字的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

/* Usage of TREE_LANG_FLAG_?:    0: IDENTIFIER_MARKED (used by search routines).       C_MAYBE_CONST_EXPR_INT_OPERANDS (in C_MAYBE_CONST_EXPR, for C)    1: C_DECLARED_LABEL_FLAG (in LABEL_DECL)       STATEMENT_LIST_STMT_EXPR (in STATEMENT_LIST)       C_MAYBE_CONST_EXPR_NON_CONST (in C_MAYBE_CONST_EXPR, for C)    2: unused    3: STATEMENT_LIST_HAS_LABEL (in STATEMENT_LIST)    4: unused */

/* Reserved identifiers.  This is the union of all the keywords for C,    C++, and Objective-C.  All the type modifiers have to be in one    block at the beginning, because they are used as mask bits.  There    are 28 type modifiers; if we add many more we will have to redesign    the mask mechanism.  */

enum rid {   /* Modifiers: */   /* C, in empirical order of frequency.  */   RID_STATIC = 0,   RID_UNSIGNED, RID_LONG,    RID_CONST, RID_EXTERN,   RID_REGISTER, RID_TYPEDEF, RID_SHORT, RID_INLINE,   RID_VOLATILE, RID_SIGNED,  RID_AUTO,  RID_RESTRICT,   RID_NORETURN, RID_ATOMIC,

  /* C extensions */   RID_COMPLEX, RID_THREAD, RID_SAT,

  /* C++ */   RID_FRIEND, RID_VIRTUAL, RID_EXPLICIT, RID_EXPORT, RID_MUTABLE,

  /* ObjC ("PQ" reserved words - they do not appear after a '@' and      are keywords only in specific contexts)  */   RID_IN, RID_OUT, RID_INOUT, RID_BYCOPY, RID_BYREF, RID_ONEWAY,

  /* ObjC ("PATTR" reserved words - they do not appear after a '@'      and are keywords only as property attributes)  */   RID_GETTER, RID_SETTER,   RID_READONLY, RID_READWRITE,   RID_ASSIGN, RID_RETAIN, RID_COPY,   RID_NONATOMIC,

  /* C (reserved and imaginary types not implemented, so any use is a      syntax error) */   RID_IMAGINARY,

  /* C */   RID_INT,     RID_CHAR,   RID_FLOAT,    RID_DOUBLE, RID_VOID,   RID_ENUM,    RID_STRUCT, RID_UNION,    RID_IF,     RID_ELSE,   RID_WHILE,   RID_DO,     RID_FOR,      RID_SWITCH, RID_CASE,   RID_DEFAULT, RID_BREAK,  RID_CONTINUE, RID_RETURN, RID_GOTO,   RID_SIZEOF,

  /* C extensions */   RID_ASM,       RID_TYPEOF,   RID_ALIGNOF,  RID_ATTRIBUTE,  RID_VA_ARG,   RID_EXTENSION, RID_IMAGPART, RID_REALPART, RID_LABEL,      RID_CHOOSE_EXPR,   RID_TYPES_COMPATIBLE_P,      RID_BUILTIN_COMPLEX,      RID_BUILTIN_SHUFFLE,   RID_DFLOAT32, RID_DFLOAT64, RID_DFLOAT128,   RID_FRACT, RID_ACCUM, RID_AUTO_TYPE, RID_BUILTIN_CALL_WITH_STATIC_CHAIN,

  /* C11 */   RID_ALIGNAS, RID_GENERIC,

  /* This means to warn that this is a C++ keyword, and then treat it      as a normal identifier.  */   RID_CXX_COMPAT_WARN,

  /* GNU transactional memory extension */   RID_TRANSACTION_ATOMIC, RID_TRANSACTION_RELAXED, RID_TRANSACTION_CANCEL,

  /* Too many ways of getting the name of a function as a string */   RID_FUNCTION_NAME, RID_PRETTY_FUNCTION_NAME, RID_C99_FUNCTION_NAME,

  /* C++ (some of these are keywords in Objective-C as well, but only      if they appear after a '@') */   RID_BOOL,     RID_WCHAR,    RID_CLASS,   RID_PUBLIC,   RID_PRIVATE,  RID_PROTECTED,   RID_TEMPLATE, RID_NULL,     RID_CATCH,   RID_DELETE,   RID_FALSE,    RID_NAMESPACE,   RID_NEW,      RID_OFFSETOF, RID_OPERATOR,   RID_THIS,     RID_THROW,    RID_TRUE,   RID_TRY,      RID_TYPENAME, RID_TYPEID,   RID_USING,    RID_CHAR16,   RID_CHAR32,

  /* casts */   RID_CONSTCAST, RID_DYNCAST, RID_REINTCAST, RID_STATCAST,

  /* C++ extensions */   RID_BASES,                   RID_DIRECT_BASES,   RID_HAS_NOTHROW_ASSIGN,      RID_HAS_NOTHROW_CONSTRUCTOR,   RID_HAS_NOTHROW_COPY,        RID_HAS_TRIVIAL_ASSIGN,   RID_HAS_TRIVIAL_CONSTRUCTOR, RID_HAS_TRIVIAL_COPY,   RID_HAS_TRIVIAL_DESTRUCTOR,  RID_HAS_VIRTUAL_DESTRUCTOR,   RID_IS_ABSTRACT,             RID_IS_BASE_OF,   RID_IS_CLASS,   RID_IS_EMPTY,                RID_IS_ENUM,   RID_IS_FINAL,                RID_IS_LITERAL_TYPE,   RID_IS_POD,                  RID_IS_POLYMORPHIC,   RID_IS_SAME_AS,   RID_IS_STD_LAYOUT,           RID_IS_TRIVIAL,   RID_IS_TRIVIALLY_ASSIGNABLE, RID_IS_TRIVIALLY_CONSTRUCTIBLE,   RID_IS_TRIVIALLY_COPYABLE,   RID_IS_UNION,                RID_UNDERLYING_TYPE,

  /* C++11 */   RID_CONSTEXPR, RID_DECLTYPE, RID_NOEXCEPT, RID_NULLPTR, RID_STATIC_ASSERT,

  /* C++ concepts */   RID_CONCEPT, RID_REQUIRES,

  /* C++ transactional memory.  */   RID_ATOMIC_NOEXCEPT, RID_ATOMIC_CANCEL, RID_SYNCHRONIZED,

  /* Cilk Plus keywords.  */   RID_CILK_SPAWN, RID_CILK_SYNC, RID_CILK_FOR,     /* Objective-C ("AT" reserved words - they are only keywords when      they follow '@')  */   RID_AT_ENCODE,   RID_AT_END,   RID_AT_CLASS,    RID_AT_ALIAS,     RID_AT_DEFS,   RID_AT_PRIVATE,  RID_AT_PROTECTED, RID_AT_PUBLIC,  RID_AT_PACKAGE,   RID_AT_PROTOCOL, RID_AT_SELECTOR,   RID_AT_THROW,    RID_AT_TRY,       RID_AT_CATCH,   RID_AT_FINALLY,  RID_AT_SYNCHRONIZED,   RID_AT_OPTIONAL, RID_AT_REQUIRED, RID_AT_PROPERTY,   RID_AT_SYNTHESIZE, RID_AT_DYNAMIC,   RID_AT_INTERFACE,   RID_AT_IMPLEMENTATION,

  /* Named address support, mapping the keyword to a particular named address      number.  Named address space 0 is reserved for the generic address.  If      there are more than 254 named addresses, the addr_space_t type will need      to be grown from an unsigned char to unsigned short.  */   RID_ADDR_SPACE_0,  /* generic address */   RID_ADDR_SPACE_1,   RID_ADDR_SPACE_2,   RID_ADDR_SPACE_3,   RID_ADDR_SPACE_4,   RID_ADDR_SPACE_5,   RID_ADDR_SPACE_6,   RID_ADDR_SPACE_7,   RID_ADDR_SPACE_8,   RID_ADDR_SPACE_9,   RID_ADDR_SPACE_10,   RID_ADDR_SPACE_11,   RID_ADDR_SPACE_12,   RID_ADDR_SPACE_13,   RID_ADDR_SPACE_14,   RID_ADDR_SPACE_15,

  RID_FIRST_ADDR_SPACE = RID_ADDR_SPACE_0,   RID_LAST_ADDR_SPACE = RID_ADDR_SPACE_15,

  /* __intN keywords.  The _N_M here doesn't correspond to the intN      in the keyword; use the bitsize in int_n_t_data_t[M] for that.      For example, if int_n_t_data_t[0].bitsize is 13, then RID_INT_N_0      is for __int13.  */

  /* Note that the range to use is RID_FIRST_INT_N through      RID_FIRST_INT_N + NUM_INT_N_ENTS - 1 and c-parser.c has a list of      all RID_INT_N_* in a case statement.  */

  RID_INT_N_0,   RID_INT_N_1,   RID_INT_N_2,   RID_INT_N_3,

  RID_FIRST_INT_N = RID_INT_N_0,   RID_LAST_INT_N = RID_INT_N_3,

  RID_MAX,

  RID_FIRST_MODIFIER = RID_STATIC,   RID_LAST_MODIFIER = RID_ONEWAY,

  RID_FIRST_CXX11 = RID_CONSTEXPR,   RID_LAST_CXX11 = RID_STATIC_ASSERT,   RID_FIRST_AT = RID_AT_ENCODE,   RID_LAST_AT = RID_AT_IMPLEMENTATION,   RID_FIRST_PQ = RID_IN,   RID_LAST_PQ = RID_ONEWAY,   RID_FIRST_PATTR = RID_GETTER,   RID_LAST_PATTR = RID_NONATOMIC };

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值