非常教程

C参考手册

C 语法

Enumerations

一个枚举类型是独特的类型,它的值是其值基本类型(见下面),其中包括明确命名常数(的值枚举常数)。

句法

枚举类型使用以下枚举说明符作为声明语法中的类型说明符进行声明:

enum identifier(optional) { enumerator-list }

其中,枚举器列表是逗号分隔的列表(允许使用尾随逗号)(自C99以来)的枚举器,其中每个列表的形式为:

enumerator

(1)

enumerator = constant-expression

(2)

其中

identifier, enumerator

-

identifiers that are introduced by this declaration

constant-expression

-

integer constant expression whose value is representable as a value of type int

与结构体或联合体一样,引入枚举类型和一个或多个枚举常量的声明也可以声明该类型或类型的一个或多个对象。

enum color_t {RED, GREEN, BLUE}, c = RED, *cp = &c;
 // introduces the type enum color_t
 // the integer constants RED, GREEN, BLUE 
 // the object c of type enum color_t
 // the object cp of type pointer to enum color_t

说明

每个出现在枚举说明符主体中的枚举器都会成为一个int在封闭范围内具有类型的整数常量,并且可以在需要整数常量时使用(例如,作为 case 标签或非 VLA 数组大小)。

enum color_t { RED, GREEN, BLUE} r = RED;
switch(r) {
     case RED   : puts("red"); break;
     case GREEN : puts("green"); break;
     case BLUE  : puts("blue"); break;
}

如果枚举器后跟=常量表达式,则其值是该常量表达式的值。如果枚举器后面没有= constant-expression,那么它的值是比同一个枚举中前一个枚举器的值大1的值。第一个枚举器的值(如果它不使用= constant-expression)为零。

enum Foo { A, B, C=10, D, E=1, F, G=F+C};
//A=0, B=1, C=10, D=11, E=1, F=2, G=12

标识符本身(如果使用)成为标记名称空间中枚举类型的名称,并且需要使用关键字 enum(除非将 typedef 放入普通名称空间中)。

enum color_t { RED, GREEN, BLUE};
enum color_t r = RED; // OK
// color_t x = GREEN: // Error: color_t is not in ordinary name space
typedef enum color_t color;
color x = GREEN; // OK

每个枚举类型与下列之一兼容:char有符号整数类型或无符号整数类型。它是实现定义的,哪种类型与任何给定枚举类型兼容,但无论它是什么,它必须能够表示该枚举的所有枚举值。

枚举类型是整数类型,因此可以在其他整数类型可以使用的任何位置使用,包括隐式转换和算术运算符。

enum { ONE = 1, TWO } e;
long n = ONE; // promotion
double d = ONE; // conversion
e = 1.2; // conversion, e is now ONE
e = e + 1; // e is now TWO

注意

与 struct 或 union 不同,C 中没有前向声明的枚举:

enum Color; // Error: no forward-declarations for enums in C
enum Color { RED, GREEN, BLUE};

枚举允许以比其更方便和结构化的方式声明命名常量#define; 它们在调试器中可见,遵守范围规则并参与类型系统。

#define TEN 10
struct S { int x : TEN; }; // OK

或者

enum { TEN = 10 };
struct S { int x : TEN; }; // also OK

参考

  • C11 standard (ISO/IEC 9899:2011):
    • 6.2.5/16 Types (p: 41)
    • 6.7.2.2 Enumeration specifiers (p: 117-118)
  • C99 standard (ISO/IEC 9899:1999):
    • 6.2.5/16 Types (p: 35)
    • 6.7.2.2 Enumeration specifiers (p: 105-106)
  • C89/C90 standard (ISO/IEC 9899:1990):
    • 3.1.2.5 Types
    • 3.5.2.2 Enumeration specifiers

关键词

enum.

C 语法相关

1.#define directive
2.#elif directive
3.#else directive
4.#endif directive
5.#error directive
6.#if directive
7.#ifdef directive
8.#ifndef directive
9.#include directive
10.#line directive
11.#pragma directive
12.alignas
13.Alternative operators and tokens
14.Analyzability
15.Arithmetic operators
16.Arithmetic types
17.Array declaration
18.Array initialization
19.ASCII Chart
20.Assignment operators
21. types
22.Basic concepts
23.Bit fields
24.break statement
25.C language
26.C Operator Precedence
27.cast operator
28.character constant
29.Comments
30.Comparison operators
31.compound literals
32.Conditional inclusion
33.Conformance
34.const type qualifier
35.Constant expressions
36.continue statement
37.Declarations
38.do-while loop
39.Escape sequences
40.Expressions
41.External and tentative definitions
42.File scope
43.floating constant
44.for loop
45.Function declarations
46.Function definitions
47.Functions
48.Generic selection
49.goto statement
50.Identifier
51.if statement
52.Implicit conversions
53.Increment/decrement operators
54.Initialization
55.inline function specifier
56.integer constant
57.Lifetime
58.Logical operators
59.Lookup and name spaces
60.Main function
61.Member access operators
62.Memory model
63.Objects and alignment
64.Order of evaluation
65.Other operators
66.Phases of translation
67.Pointer declaration
68.Preprocessor
69.restrict type qualifier
70.return statement
71.Scalar initialization
72.Scope
73.sizeof operator
74.Statements
75.static assert declaration
76.Static storage duration
77.Storage-class specifiers
78.string literals
79.Struct and union initialization
80.Struct declaration
81.switch statement
82.Thread storage duration
83.Type
84.Type
85.Typedef declaration
86.Undefined behavior
87.Union declaration
88.Value categories
89.Variadic arguments
90.volatile type qualifier
91.while loop
92._Alignof operator
93._Noreturn function specifier
C

C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。