C语言笔记-1

news/2024/11/29 20:37:32/

文章目录

    • C 基础语法
        • 注意
    • C 其他知识点
      • 编译过程
      • 编译器数据模型区别
      • 32/64位机器中,各数据类型所占位数
      • assert() 断言(宏)
        • 用法总结与注意事项

C 基础语法

注意

  • if(a=表达式) 判断的就是a的值,而不是判断这个赋值操作的成功与否。
    • 查看对应的汇编代码,它是直接用a的地址里的值来和0做比较,就是把左边的a地址里的值作为if中的判断条件。
  • scanf("%c", &p[i].job); //当读入一个字符时,要注意加&

C 其他知识点

编译过程

在这里插入图片描述

编译器数据模型区别

在这里插入图片描述

32/64位机器中,各数据类型所占位数

下图32位与64位类型所占字节数是在linux系统下的字节数,如果是windows下个别会有所变化,比如windows 64位下的long与unsigned long均为4字节

在这里插入图片描述

这即是说各个类型的变量长度是由编译器来决定的,而当前主流的编译器中一般是32位机器和64位机器中int型都是4个字节(例如,GCC)。下面列举在GCC编译器下32位机器和64位机器各个类型变量所占字节数:

在这里插入图片描述

assert() 断言(宏)

assert 宏的原型定义在 assert.h 中,其作用是如果它的条件返回错误,则终止程序执行。

#include <assert.h> 
void assert( int expression );

其表达的意思就是,程序在我的假设条件下,能够正常良好的运作,其实就相当于一个 if 语句:

if(假设成立) {程序正常运行;
}
else {报错&&终止程序!(避免由程序运行引起更大的错误)  
}

assert 的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向 stderr 打印一条出错信息,然后通过调用 abort 来终止程序运行。

使用 assert 的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。

在调试结束后,可以通过在包含 #include 的语句之前插入 #define NDEBUG 来禁用 assert 调用,示例代码如下:

#include 
#define NDEBUG 
#include

用法总结与注意事项

1)在函数开始处检验传入参数的合法性

如:

int resetBufferSize(int nNewSize) 
{ 
//功能:改变缓冲区大小, 
//参数:nNewSize 缓冲区新长度 
//返回值:缓冲区当前长度 
//说明:保持原信息内容不变 nNewSize<=0表示清除缓冲区 
assert(nNewSize >= 0); 
assert(nNewSize <= MAX_BUFFER_SIZE); ... 
}

2)每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败

不好:

assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize); 

好:

assert(nOffset >= 0); 
assert(nOffset+nSize <= m_nInfomationSize); 

3)不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题

错误: assert(i++ < 100)

这是因为如果出错,比如在执行之前i=100,那么这条语句就不会执行,那么i++这条命令就没有执行。

正确:

assert(i < 100)
i++; 

4)assert和后面的语句应空一行,以形成逻辑和视觉上的一致感

5)有的地方,assert不能代替条件过滤

程序一般分为Debug 版本和Release 版本,Debug 版本用于内部调试,Release 版本发行给用户使用。断言assert 是仅在Debug 版本起作用的宏,它用于检查"不应该"发生的情况。以下是一个内存复制程序,在运行过程中,如果assert 的参数为假,那么程序就会中止(一般地还会出现提示对话,说明在什么地方引发了assert)。


http://www.ppmy.cn/news/573073.html

相关文章

智能安全用电技术电气火灾监控的应用介绍 安科瑞 许敏

摘要&#xff1a;智能安全用电技术在智慧监狱的应用&#xff0c;可以提升监狱智能化管控水平和降低能耗。文章以智能安全用电技术为入手点&#xff0c;简要分析了监狱用电现状&#xff0c;论述了智能安全用电技术在智慧监狱中的具体应用&#xff0c;对智能安全用电技术在智慧监…

业务创新的利器:探索Flutter与小程序容器的融合应用

Flutter是由谷歌开发的开源用户界面&#xff08;UI&#xff09;工具包&#xff0c;用于构建跨平台移动应用程序、Web应用程序和桌面应用程序。它采用一种现代化的方式&#xff0c;使用单一代码库可以同时构建iOS和Android应用&#xff0c;并且能够实现高性能、高保真的用户界面…

RCA编码规则

RCA编码&#xff0c;一帧数据由引导码用户码数据码组成 其中引导码由4ms的高点平脉冲4ms的低电平脉冲组成&#xff0c;接下来依次为4位用户码&#xff0c;8位数据码&#xff0c;4位用户反码&#xff0c;8位数据码反码。码型的波形图如图所示 在 RCA 编码的波形图中&#xff0c;…

项目管理:RCA

最近项目组外出集体活动&#xff0c;吃自助&#xff0c;之后多人上吐下泻。食物中毒。我们要追问到底。找到RCA。 作为程序员&#xff0c;天天被人追问RCA。 终于逮到一次自己作为当事人&#xff0c;有权追问RCA时&#xff0c;一定不能手软。 从追问人的角度考虑&#xff0c…

RCA

RCA是一种解决问题的方法&#xff0c;其旨在定位问题根本原因并最终使问题得到解决。RCA基于这样的理念&#xff1a;解决问题的最好方法是修正或消除问题产生的根本原因&#xff0c;而不是仅仅消除问题带来的表面上显而易见的不良症状。 一般来说&#xff0c;我们希望通过分析问…

rca接口_新手小白必读 1分钟看懂同轴和光纤音频接口

当我们在使用数码音频产品时(台式设备、随身设备)&#xff0c;经常会看到设备上配有各种音频接口。这些接口的功能各不相同&#xff0c;而且需要使用不同的线材进行连接&#xff0c;因此这就给很多新手小白用户带来了不少困扰。今天&#xff0c;小编就带大家快速了解下最常见的…

如何区别AV接口和RCA接口,两者有什么区别?

复合视频接口&#xff08;AV接口或Video接口&#xff09;&#xff0c;曾是最普遍的一种视频接口&#xff0c;几乎所有电视机、影碟机都有这个接口。它是音频、视频分离的视频接口&#xff0c;一般由黄、白、红3路三个独立的RCA插头(又叫梅花接口、RCA接口)组成的&#xff0c;其…

根本原因分析(RCA)

文章目录 一、根本原因分析方法二、因果图三、如何绘制鱼骨图四、导致缺陷的原因分类&#xff08;大骨&#xff09;五、小思考六、五问法1.示例2.五问法要点3.五问法过程举例 七、关联图1.案例分析2.使用关联图进行分析 一、根本原因分析方法 二、因果图 三、如何绘制鱼骨图 四…