码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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为多初始化的一个变量 */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 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}}; 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    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; 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    好的定义:

    Good example:
    typedef unsigned short uint16_t;
    
    • 1
    • 2

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

    在这里插入图片描述

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

  • 相关阅读:
    Java核心知识点十万字最强总结(从基础到高级,Java的核心知识点的下篇,全部都是精华)
    EasyCVR视频汇聚平台云计算技术核心优势:高效、灵活与可扩展性深度解读
    【STM32】标准库-自定义BootLoader
    物联网AI MicroPython学习之语法 TIMER硬件定时器
    北斗导航 | 北斗/GNSS相关数据下载:IGS/IGMAS/MGEX/DCB/brdc/gamit/bernese/rinex等
    conda配置完整的pytorch虚拟环境
    线代小课整理
    Istio、eBPF 和 RSocket Broker:深入研究服务网格
    【五天时间】Qt从入门到实战:第三天
    记一次【RabbitMQ集群网络分区】的问题,以及网络分区时的影响范围和如何恢复
  • 原文地址:https://blog.csdn.net/OMGMac/article/details/128211998
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号