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规范编辑笔记第七篇见~

在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/OMGMac/article/details/128211998