首页 > 编程语言 >【C】专家编程 (Expert C Programming) 阅读笔记

【C】专家编程 (Expert C Programming) 阅读笔记

时间:2023-06-18 11:34:08浏览次数:55  
标签:顺序 转换 Expert 符号 int 编程 Programming 参数 gets

 

  第一章 C:穿越时空的迷雾  

 

1 p22 ~ 24  ANSI C 有此问题。 “安静”的类型转换原则:当执行算术运算时,操作数的类型如果不同,就会发生转换。数据类型一般朝着浮点精度更高,长度更长的方向转换,整形术如果转换为 singed 不会丢失信息,就转换为 signed,否则转换为 unsigned。   unsinged int a = 1; int b = -1; if (b < a) {     printf(“yes \n");     } else {     printf(“no \n”);  //运行结果是这个!!! }   If 语句在 signed 和 unsigned int 之间测试相等性,b 被升级为 unsighed int,因而变成了一个很大的正整数,所以条件为假。如果转换 a 为 int 类型,再比较,不会有问题。   小启发:  尽量不要在你的代码里使用无符号类型,以免增加不必要的复杂性。尤其是,不要仅仅因为无符号数不存在负值(如年龄,国债)而用它来表示数量。 只有在使用位段和二进制掩码的时候,才使用无符号数。应该在表达式中强制类型转换,是操作数同时为有符号数或无符号数,这样就不必由编译器选择结果类型。     第二章 这不是Bug,而是语言特性   1 p40 小启发:x = f() + g() * h();  f,g,h 的计算顺序是不确定的,被称为 意群的计算顺序。这个顺序是未定义的,目的是让编译器充分利用自身架构的特点。编程时,一定不要依赖意群的计算顺序。类似的还有函数中,参数如果是表达式,计算顺序也不确定。   2 p42 用 fgets 取代 gets 函数,由于 gets 没有限制输入的长度,也没有检查,所以很容造成溢出。 fgets 由于限制了长度,可以防止这个问题发生。但标准里没有去掉 gets 方法。   3 p45 shell 或者 C 程序的参数中,要注意 “-” 字符。因为 “-” 往往被理解成参数,例如:“ls -l”。但有时候,你的参数真的只是以 “-” 开头而已,这样却会导致一些错误。比如:grep “-happy”。注意,在运行普通C程序,进行手动参数解析的时候,尤其要注意这一点。   4 p49 由函数的调用者来分配内存,在同一代码块中进行 malloc 和 free 操作,内存管理是最轻松的。   5 p51 尽量使用 lint 程序检查代码。虽然许多人认为应该把 lint 作为一个独立的工具,但是作者认为 独立 = 束之高阁。     第三章 分析 C 语言的声明   1 p58 声明是如何形成的:  

 

 

 

  2 p63 声明的分析:  

 

 

 

  一个分析的示例:  

 

  对上面解析的一点解释:  

 

3 p68 typedef   

标签:顺序,转换,Expert,符号,int,编程,Programming,参数,gets
From: https://www.cnblogs.com/beautiful-scenery/p/17488871.html

相关文章

  • 关于如何使用C++进行编程(不使用数据库的情况下)
    问题描述对于一个长期使用Java连接数据库,实现javaweb编程的软工友友来说,突然在编程任务中不允许连接数据库,就有一点的蒙圈,没有办法,只能去查阅资料啦!问题解决不出意外的话,这次我们就需要使用文件操作来存储数据啦!(然后另外一种方法时json,显然,文件操作更加简单一点、也是更加熟悉......
  • 【雕爷学编程】Arduino动手做(114)---US-015高分辨超声波模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是......
  • C语言基础教程(宏的使用和多文件编程)
    (文章目录)前言这篇文章来给大家讲解一下C语言中的多文件编程,在C语言开发项目的过程中使用多文件编程是必不可少的,使用多文件编程可以方便我们代码的管理和编写,让我们的代码可读性和移植性更高。一、宏的定义和使用在C语言中,宏(Macro)是一种预处理指令,用于在编译阶段进行文本......
  • 编程知识提纯之法
    编程知识提纯,本质上就是将编程知识结构化。引言在“打造适合自己的知识库”一文中,讲到了打造知识库的一般步骤。其中整理固然是必要工作,而核心却在于知识提纯。在“职业发展战术设计:构建可持续积累的职业优势”一文中,谈到:构建良好职业优势的一大基础支撑能力即是知识提纯能......
  • Reactive Extensions 响应式扩展 用于事件驱动编程的库,具有可组合的声明性模型
    响应式扩展这个存储库包含四个库,它们在概念上是相关的,因为它们都与LINQoverofthings序列有关:ReactiveExtensionsfor.NET又名Rx.NET或Rx( System.Reactive ):一个用于事件驱动编程的库,具有可组合的声明性模型AsyncRx.NET(实验性预览)(System.Reactive.Async):Rx的实验......
  • 零代码编程:用ChatGPT打造小宇宙播客下载软件2.0
    之前用ChatGPT写了一个简单的小宇宙播客下载应用,但是实际使用一段时间后,发现有几个问题,比如:如果文件名中有一些特殊符号,下载不成功;有些m4a格式的也下载不成功;文件大下载的慢;根据这些情况,进行完善,利用ChatGPT生成了小宇宙播客下载软件2.0版本:在ChatGPT输入如下提示词:你现在是一个Pyt......
  • 【雕爷学编程】Arduino动手做(113)---5110液晶屏模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是......
  • 编程语言的三种范式
     001、面向过程,如c、shell;性能高,代码可读性差。002、面向对象:c++、java;003、函数式编程。 面向过程编程:以过程为中心,按照一定的顺序执行程序。强调程序的执行顺序和控制流程。程序的重点在于算法和数据的处理,使用全局变量和函数进行操作。编写简单,可......
  • 网络编程相关(IO多路复用)
    selectpollepoll的一些比较select的fd_set通过bitmap1024位表示存入的文件描述符,通过01表示存入的文佳描述符,且是从0下标开始,如存入的文件描述符是12579,则在bitmap里表示是0110010101000...由于bitmap从0下标开始,存入的文件描述符从1开始,从0到存入的最大文件描述符,范围是max+......
  • python入门学习之《python编程快速上手》
    #《python编程快速上手》1-9章第1-2章:python基础和控制流#python严格区分大小写;#代码行的缩进很重要,一般用4个空格。大多数情况下,代码行缩进告诉python它属于哪个代码块。#python下标从0开始;#行末使用续行字符\,将一行指令写成多行。在[],{},或()中的多行语句,不需要使用反斜......