C DECLARATIONS
declaration:
- declaration-specifiers init-declarator-list(opt) -- 声明指定 初始化列表
declaration-specifiers:
- storage-class-specifier declaration-specifier(opt) -- static xxx
- type-specifier declaration-specifiers(opt) -- int xxx
- type-qualifier declaration-specifiers(opt) -- const xxx
static int const a
init-declarator-list:
- init-declarator -- x
- init-declarator-list , init-declarator -- x,y = 1,z
init-declarator:
- declarator -- x
- declarator = initializer -- x = 1 | a =
存储类指定
storage-class-specifier:
- typedef -- typedef foo bar
- extern -- extern void hello();
- static -- static int a;
- auto -- auto char b;
- register -- register int c; (对c的访问越快越好)
一次最多一个存储类specifier,
类型指定
type-specifier:
- void
- char
- short
- int
- long
- float
- double
- signed
- unsigned
- struct-or-union-specifier
- enum-specifier
- typedef-name
每组type specifiers都应该是以下集合中的一个(可以是任何顺序, signed int和int signed是一样的)
不抄下来了
类型限定
type-qualifiers:
- const
- volatile
相同类型的qualifier不应该在同一个specifier list或者qualifier list出现超过一次(不管是直接出现还是通过typedef)
declarator
declarator:
- pointer(不必要) direct-declarator
direct-declarator:
- identifier -- 正常变量的声明
- (declarator)
- direct-declarator [constant-expression(opt)] -- 数组声明
- direct-declarator (parameter-type-list) -- 函数指针声明
- direct-declarator (identifier-list(opt)) -- 函数声明
pointer:
- type-qualifier-list(opt) -- const, volatile
- type-qualifier-list(opt) pointer -- 加type qualifier, 同时定义指针
typedef int signed long T;
static const T a, *b, *const c , *const d = (const T *)1, e = 2, f[2] = {1,2};
// a, *b, *c..都是const T
const T g(int,int *), (*h)(int) = 0;
浙公网安备 33010602011771号