没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
C 语言支持的数据类型
基本类型
C 类型系统由下列类型组成:
类型 void
基本类型
类型 char
有符号整数类型
标准: signed char 、 short 、 int 、 long 、 long long (C99 起)
扩展:实现定义,例如 __int128
无符号整数类型
标准: _Bool 、 (C99 起)unsigned char 、 unsigned short 、 unsigned int 、 unsigned long 、
unsigned long long (C99 起)
扩展:实现定义,例如 __uint128
浮点类型
实浮点类型: float 、 double 、 long double
复数类型: float _Complex 、 double _Complex 、 long double _Complex
虚数类型: float _Imaginary 、 double _Imaginary 、 long double _Imaginary
枚举类型
派生类型
数组类型
结构体类型
联合体类型
函数类型
指针类型
原子类型
对于上面列出的每个类型,可以存在数种其类型的限定版本,对应
const
、
volatile
和
restrict
限定符的一、二或全部三个组合(在
限定符的语义所允许处)。
类型组别
对象类型:所有不是函数类型的类型
字符类型: char 、 signed char 、 unsigned char
整数类型: char 、有符号整数类型、无符号整数类型、枚举类型
实数类型:整数类型和实浮点类型
算术类型
:整数类型和浮点类型
标量类型:算术类型和指针类型
聚合类型:数组类型和结构体类型
派生声明器类型:数组类型、函数类型和指针类型
兼容类型
C 程序中,在不同翻译单元中涉及同一对象或函数的声明,不必拥有相同类型。它们只需要拥有相似的类型,正式而言即兼容类型。
同样的规则应用到函数调用和左值访问;实参类型必须与形参类型兼容,而左值表达式类型必须与被访问对象的类型兼容。
类型 T 与 U 兼容,若
它们是同一类型(同名或由
typedef
引入的别名)
它们是兼容的无限定类型的等同 cvr 限定版本
它们是指针类型,并指向兼容类型
它们是数组类型,且
其元素类型兼容,且
若都拥有常量大小,则大小相同。注意:未知边界数组与任何兼容元素类型的数组兼容。VLA 与任何兼容元素类型的数组兼容。(C99
起)
它们都是结构体/联合体/枚举类型,且
(C99)若一者以标签声明,则另一者必须以同一标签声明。
若它们都是完整类型,则其成员必须在数量上准确对应,以兼容类型声明,并拥有匹配的名称。
另外,若它们都是枚举,则对应成员亦必须拥有相同值。
另外,若它们是结构体或联合体,则
对应的元素必须以同一顺序声明(仅结构体)
对应的位域必须有相同宽度。
一者为枚举类型,而另一者为该枚举的底层类型
它们是函数类型,且
其返回类型兼容
它们都使用参数列表,参数数量(包括省略号的使用)相同,而其对应参数,在应用数组到指针和函数到指针类型调整,及剥除
顶层限定符后,拥有相同类型
一个是旧式(无参数)定义,另一个有参数列表,参数列表不使用省略号,而每个参数(在函数参数类型调整后)都与默认参数
提升后的对应旧式参数兼容
一个是旧式(无参数)声明,另一个拥有参数列表,参数列表不使用省略号,而所有参数(在函数参数类型调整后)不受默认参
数提升影响
类型 char 不与 signed char 兼容,且不与 unsigned char 兼容。
若涉及同一对象或函数的二个声明不使用兼容类型,则程序的行为未定义。
//
翻译单元
1
struct S {int a;};
extern struct S *x; // 与 TU2 的 x 兼容,但不与 TU3 的 x 兼容
//
翻译单元
2
struct S;
extern struct S *x; // 与两个 x 兼容
//
翻译单元
3
struct S {float a;};
extern struct S *x; // 与 TU2 的 x 兼容,但不与 TU1 的 x 兼容
// 行为未定义
//
翻译单元
1
#include <stdio.h>
struct s {int i;}; //
与
TU3
的
s
兼容,但不与
TU2
的
s
兼容
extern struct s x = {0}; //
与
TU3
的
x
兼容
extern void f(void); //
与
TU2
的
f
兼容
int main()
{
f();
return x.i;
}
//
翻译单元
2
struct s {float f;}; //
与
TU4
的
s
兼容,但不与
TU1
的
s
兼容
extern struct s y = {3.14}; //
与
TU4
的
y
兼容
void f() //
与
TU1
的
f
兼容
{
return;
剩余29页未读,继续阅读
资源评论
icysmile131
- 粉丝: 4628
- 资源: 688
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功