往期文章:
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规范编辑笔记第七篇见~
本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞,谢谢~