C的声明

source

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 intint 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;
posted on 2020-03-05 14:22  jakio6  阅读(156)  评论(0)    收藏  举报