Roh*_*uja 6 c struct declaration definition
我有一段时间没有接触过C语言,所以我只是经历了一些概念,但却找不到任何有关结构的好资料.
任何人都可以解释
struct A
{
int a;
char b;
float c;
};
Run Code Online (Sandbox Code Playgroud)
这是结构的声明或定义A.
Jen*_*ens 11
它声明了一个带有struct标签A和指定成员的结构.它既没有定义也没有为对象保留任何存储空间.
根据C99标准,6.7声明:
语义
5声明指定一组标识符的解释和属性.标识符的定义是该标识符的声明:
- 对于一个对象,导致为该对象保留存储;
- 对于一个功能,包括功能体; (脚注98)
- 对于枚举常量或typedef名称,是标识符的(唯一)声明.
对于定义,您需要在最终分号之前提供对象标识符:
struct A
{
int a;
char b;
float c;
} mystruct;
Run Code Online (Sandbox Code Playgroud)
要初始化mystruct,你会写
struct A
{
int a;
char b;
float c;
} mystruct = { 42, 'x', 3.14 };
Run Code Online (Sandbox Code Playgroud)
这是一个宣言。
struct A;是前向声明或不完整声明。
struct A
{
int a;
char b;
float c;
};
Run Code Online (Sandbox Code Playgroud)
是完整的struct声明。
另请检查comp.lang.c 常见问题解答列表问题 11.5
在前向声明 后struct,您可以使用结构体指针,但不能取消引用指针或使用sizeof运算符或创建 的实例struct。
声明后,您还可以使用struct对象、应用sizeof运算符等。
来自C11 规范的6.7.2.1 结构和联合说明符
8 直到紧接终止列表的 } 之后,该类型才完整,此后才完整。
以及从6.7.2.3 标签开始
如果形式
struct-or-union 标识符的类型说明符不是作为上述形式之一的一部分出现,并且没有其他标识符作为标记的声明可见,则它声明不完整的结构或联合类型,并声明标识符作为该类型的标签。131 )
131不存在与 enum 类似的结构
这不应该与extern struct A aa;v/s 混淆,v/sstruct A aa ={/*Some values*/};是 object 的声明和定义aa。
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |