C语言笔记-1 编译过程字节数

news2025/1/4 19:25:47

文章目录

    • 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.coloradmin.cn/o/686047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目经理告诉你,项目管理的基本原则

张伟初升为项目经理&#xff0c;正面临着职业生涯中的挑战。他意识到项目经理的责任是复杂而艰巨的&#xff0c;因此在工作中经常犯错。他发现自己的表达不够清晰&#xff0c;思维混乱&#xff1b;花费大量时间制作的文字记录重点不突出&#xff0c;缺乏逻辑。这些问题破坏了他…

韶音open fit开放式耳机怎么样?和南卡OE Pro相比哪个值得入手的呢?

最近南卡新上线了一款南卡OE Pro&#xff0c;官方宣称佩戴上0压无感&#xff0c;是音质体验最好的耳机&#xff0c;究竟有没有这么好用呢&#xff1f;正好我手头上也有了南卡OE Pro&#xff0c;试用了几天&#xff0c;那么下面我就来给大家对比一下耳机圈内这两款热门的开放式耳…

AI智能服务未来可能的场景

一、产业结构 ChatGPT大模型技术变革加速人工智能产业的变迁 1.投资热 2.产业结构&#xff1a;硬件-云平台-智能应用-应用提供 智能服务产业未来会是一个从算力到服务分发全流程的结构 二、Al智能无处不在的未来&#xff0c;产业将如何演变&#xff1f; 1.技术&#xff1a;…

【正点原子STM32连载】 第四十二章 DS18B20数字温度传感器实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第四…

IEEE Vis会议内容整理

IEEE Vis 2017 IEEE 2017的VIS会议主题按论文的类型划分为三类&#xff1a;可视分析&#xff08;VAST&#xff09;、信息可视化&#xff08;InfoVis&#xff09;、科学可视化&#xff08;SciVis&#xff09;。因为可视化研究的涉及的方向越来越多&#xff0c;已超出了这三个主…

python爬虫学习简记

目录 页面结构的简单认识 爬虫概念理解 urllib库使用 爬虫解析工具xpath JsonPath Selenium requests基本使用 scrapy 页面结构的简单认识 如图是我们在pycharm中创建一个HTML文件后所看到的内容 这里我们需要认识的是上图的代码结构&#xff0c;即html标签包含了hea…

13、Nginx高级之高级模块(geoip_module)

一、ngx_http_geoip_module模块 ngx_http_geoip_module模块使用预编译的MaxMind数据库&#xff0c;根据客户端IP地址创建变量值 &#xff0c;读取ip所在地信息。 当使用支持IPv6的数据库(1.3.12, 1.2.7)时&#xff0c;IPv4地址被查找为IPv4映射的IPv6地址。 默认情况下不构建此…

聚焦数字能源供给侧和需求侧,龙讯旷腾出席2023全球数字能源展

本月初&#xff0c;深圳市人民政府新闻办召开2023全球数字能源展新闻发布会&#xff0c;宣布本次展会将于6月29日-7月2日在深圳会展中心&#xff08;福田馆&#xff09;举办。此次展会将聚焦数字能源供给侧和需求侧&#xff0c;着力打造数字能源领域集专业性、实践性、国际性和…

打造智能公路工程:BIM+GIS可视化管理平台的应用

摘要&#xff1a; 本文研究了BIM技术在交通基础设施领域的应用现状&#xff0c;并探索了BIM与GIS技术的关键融合方法&#xff0c;研发了BIMGIS可视化管理平台&#xff0c;并通过实际项目应用验证方案的可行性。研究表明&#xff0c;BIM与GIS的融合技术具有广泛的应用价值&…

人人都能生成火爆全网的最不像二维码的二维码

最近有人展示了使用 Stable Diffusion 创建的艺术二维码。这些二维码是使用定制训练的 ControlNet模型生成的。 但是操作门槛有点高。 你需要 GPU&#xff0c;还需要学习如何使用 Stable Diffusion。 现在有一款非常无脑的产品&#xff0c;使用这个产品来创建艺术二维码&…

【算法题】算法之动态规划系列(基础篇)

算法之动态规划系列&#xff08;基础篇&#xff09; 一、前置基础二、题目-- 爬楼梯2.1、思路2.2 代码实现 三、题目--杨辉三角3.1、思路3.2、代码实现 四、题目--买卖股票的最佳时机4.1、思路4.2、代码实现4.3、优化 五、比特位计数5.1、思路5.2、代码实现&#xff08;最高有效…

大数据从0到1的完美落地之sqoop命令执行

Sqoop命令执行 常见命令执行参数 通过Sqoop加不同参数可以执行导入导出,通过sqoop help 可以查看常见的命令行 #常见Sqoop参数 [rootqianfeng01 sqoop-1.4.7] sqoop helpcodegen Generate code to interact with database recordscreate-hive-table Import a ta…

DC-DC降压恒流芯片 12-110V 9V/1A AP2400 LED汽车摩托车灯驱动IC

1,方案来源&#xff1a;深圳市世微半导体有限公司 2&#xff0c;产品BOM表&#xff1a;输入 12-100V 输出9V 0.9A 3&#xff0c;产品线路图&#xff1a;输入 12-100V 输出9V 0.9A 4&#xff0c;产品介绍 AP2400 是一款 PWM 工作模式, 率、外围简单、外驱功率管&#xff0…

Axure教程—复选框全选与反选

很多业务系统之中都会有以列表的形式展现数据的情况&#xff0c;那么问题来了&#xff0c;对列表选择时会出现多选、全选、反选的问题&#xff0c;今天就来介绍如何使用axure原型工具实现复选框的多选、全选和反选。 效果预览 预览地址&#xff1a;https://ddprtm.axshare.com…

FFmpeg流媒体处理的收流与推流

1. 简介 流媒体是使用了流式传输的多媒体应用技术。如下是维基百科关于流媒体概念的定义&#xff1a; 流媒体 (streaming media) 是指将一连串的媒体数据压缩后&#xff0c;经过网络分段发送数据&#xff0c;在网络上即时传输影音以供观赏的一种技术与过程&#xff0c;此技术使…

20亿元项目“落子”杭州,这家企业加速全栈智驾平台规模化交付

6月20日&#xff0c;在“幸会杭州”投资促进大会上&#xff0c;中国领先的智能驾驶解决方案服务商和产品供应商福瑞泰克与杭州市政府就在杭州市高新技术开发区&#xff08;滨江&#xff09;建设全球研发管理总部达成签约。福瑞泰克董事长兼首席执行官张林博士受邀出席大会&…

SSM摄影服务线上选购预约系统-计算机毕设 附源码83784

SSM摄影服务线上选购预约系统 摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用SSM技…

网络安全|渗透测试入门学习,从零基础入门到精通—动态分析技术OllyDbg案例详情

目录 1、准备工作 2、加载目标文件进行调试 3、单步跟踪 4、设置断点 5、调试分析 1、准备工作 分析一个Windows程序要比分析一个DOS程序容易得多因为在Windows中只要API函数被使用了&#xff0c;再想对要寻找蛛丝马迹的人隐藏一些信息就比较困难了。因此&#xff0c;在分析…

软考高级系统架构设计师(七) 需求工程相关

目录 需求工程概述 需求工程-需求获取 需求开发-需求分析 需求分析-OOA OOA-UML-41视图 需求定义 需求验证 需求跟踪 需求变更管理 软件系统建模 结构化设计 面向对象设计 软件界面设计 需求工程概述 需求工程-需求获取 需求获取方法&#xff1a; 需求开发-需求分…

在 BI 工具 Tableau 中使用 databend

Tableau是一款流行的数据可视化和业务智能工具。它提供了直观、交互式的方式来探索、分析和呈现数据&#xff0c;帮助用户更好地理解数据的意义和洞察。 本教程帮助用户在 Tableau 中连接 databend 进行 BI 数据分析。 Databend jdbc Tableau 支持所有实现了 JDBC 协议的数据…