C规范编辑笔记(六)

往期文章:

C规范编辑笔记(一)
C规范编辑笔记(二)
C规范编辑笔记(三)
C规范编辑笔记(四)
C规范编辑笔记(五)

正文:

今天我们继续来分享一下我们C规范编辑笔记第六篇~
话不多说,我们直接来看:

1、 结构体变量不得在未指定初始化值的情况下进行初始化,并且必须初始化结构变量的每个字段/元素。

*每个元素都必须使用明确的标识进行初始化,没有多余的初始化值。或者,可以在声明中使用 {0} 初始值设定项。这里举例两个例子来进行对比:

先看不好的例子

Bad example:
int32_t y[5] = {1, 2, 3}; /* 此处的初始化具有误导性——实际上,最后两个元素初始化为零 */
int32_t z[2] = {1, 2, 3}; /* 多初始化一个值 */
int16_t vv[5] = { [0] = -2, [1] = -9, [3] = -8, [2] = 18 }; /* s错误来源,索引 2 和 3 不是按递增顺序排列的,而 4 被遗忘了 */
struct person {
unsigned char name[20];
uint16_t roll;
float marks;
int grades[10];
};
struct person p1 = {" ", 0}; /* 模糊定义 */
struct person p2 = {"toto" ,67 ,78.3 ,{0} ,12}; /* 12为多初始化的一个变量 */

好的例子

Good example:
int32_t y[5] = { 1, 2, 3, 4, 5 }; 
int32_t z[2] = { 1, 2 }; 
int32_t w[3] = { 0 }; 
/* 以下这种索引值初始化可能比较少见*/
int16_t vv[5] = { [0] = -2, [1] = -9, [2] = 18, [3] = -8, [4] = 33 }; /* ok */
struct person {
unsigned char name[20];
uint16_t roll;
float marks;
int grades[10];
};
//结构体这种初始化可以参考一下
struct person p1 = { .name = "titi", .roll = 12, .marks = 10.0f, .note = {0}};
struct person p2 = { .name="toto", .roll=67, .marks=78.3 , .grades={0}}; 

2、C 标准没有为每种类型的整数定义明确的大小。特别是对于int类型,根据架构的不同,可以是16位、32位或64位。

3、普通的 char 类型不应该用于数值,因为它的符号不是由 C 标准指定的,而是由实现定义的。此类型必须仅限于字符处理。

*规则 — 只有 signed char 和 unsigned char 类型必须用于处理数值,因此使用char类型处理整数需要前面加上有无符号。

4、 建议——不要重新定义类型别名,比如:
不好的多次定义一个类型别名

Bad example:
/* 这里重复对unsiged short类型进行重定义*/
typedef unsigned short uint16_t;
typedef unsigned short uint16_type; 
typedef uint16_t unsigned_short; 

好的定义:

Good example:
typedef unsigned short uint16_t;

好了,今天我们就先分享到这里~
我们C规范编辑笔记第七篇见~

在这里插入图片描述

本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞,谢谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OMGMac

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值