C99的一些新特性记录

news2025/2/10 22:11:42

固长类型头文件<stdint.h>

由于历史原因,C语言中实现的整型数只保证了在不同硬件体系中的最小长度,因此在使用时,需要根据代码实际运行的平台来确定类型的长度,这导致代码非常不方便移植。C99标准通过增加固长类型头文件引入了固定长度的整型数。stdint.h文件定义的固长整数类型如下:

8位整型数:int8_t,uint8_t
16位整型数:int16_t,uint16_t
32位整型数:int32_t,uint32_t
64位整型数:int64_t,uint64_t

注意,在单片机的stm32f4xx.h文件中又进一步做了定义u8、u16、u32

unsigned int 32 (C语言标准表达方法)

这三种方式都是在表达同一个意思。ST 搞这么多花样,无非是想开发人员在写代码时定义数据类型能少写几个符号,然后又因为前后版本升级,为了兼容旧版本(主要是V2.0)才会出现这么多表示方法。不管他怎么换,都是基于标准C来的。 

 

bool类型

C标准的一大缺憾就是没有定义布尔类型,导致在大部分软件中都基本需要自定义布尔类型使用。C99标准意识到了这个问题,新增加了_Bool关键字,用于定义布尔类型。至于布尔类型值的定义则置于新增的stdbool.h头文件中:

#ifdef __cplusplus
# define false false
# define true true
#else
# undef false
# define false 0
# undef true
# define true 1
#endif

for循环变量初始化

C99标准引入了C++中的for循环变量初始化方式,允许在for循环语句中定义循环局部变量使用,这避免了每次使用for循环语句时,都需要定义一个通常只会在for语句中使用的循环变量:

混合声明

在ANSI C标准中,局部变量声明必须要放在函数的首部,这是由历史原因造成。编译器在编译函数时,需要提前为函数预留堆栈空间,将局部变量放在首部便于编译器进行处理。但是C99现在支持混合声明,这意味着,你可以在函数实现的任何地方,声明你所需要的变量。

内联函数

C99标准新增inline关键字用于修饰函数,使用inline关键字修饰的函数则成为内联函数,编译器在编译时,会尝试将内联函数扩展到所有该函数的调用处,从而避免过多的对该函数调用的开销。但由于内联函数的代码指令会被扩展到被调用处,因此会增加目标文件的大小,所以需要谨慎使用内联语义。


处于宏定义和函数之间的一种方案。

内联函数和宏的区别在于,宏是由预处理器对宏进行替代 ,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。

内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。

内联函数也有一定的局限性。就是函数中的执行代码不能太多了,如果,内联函数的函数体过大,一般的编译器会放弃内联方式,而采用普通的方式调用函数。这样,内联函数就和普通函数执行效率一样了。

更多内容可参考百度百科内联函数_百度百科

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/640331.html

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

相关文章

【Unity3D】屏幕深度和法线纹理简介

1 前言 1&#xff09;深度纹理和法线纹理的含义 深度纹理本质是一张图片&#xff0c;图片中每个像素反应了屏幕中该像素位置对应的顶点 z 值相反数&#xff08;观察坐标系&#xff09;&#xff0c;之所以用 “反应了” 而不是 “等于”&#xff08;或 “对应” &#xff09;&am…

chatgpt赋能python:Python浮点型转换为整型的方法和应用场景

Python浮点型转换为整型的方法和应用场景 介绍 Python的浮点型和整型在数值计算中应用广泛。有时候我们需要将一个浮点数转换为整数&#xff0c;这时候就需要使用Python提供的一些函数来完成转换。本文将介绍Python浮点型转换为整型的方法和应用场景。 浮点型和整型的区别 …

初探MyBatis实现简单查询

一、创建数据库与表 1、创建数据库 在Navicat里创建MySQL数据库 - testdb&#xff0c;采用utf8mb4字符集 2、创建用户表 CREATE TABLE t_user (id int(11) NOT NULL AUTO_INCREMENT,name varchar(50) DEFAULT NULL,age int(11) DEFAULT NULL,address varchar(255) DEFAULT…

SpringBoot的日志文件

文章目录 前言日志怎么用自定义打印日志⽇志级别 - 了解⽇志持久化Lombok提供的方法 前言 上文讲述了 SpringBoot项目的构建 与配置文件的使用 ,下面来介绍 SpringBoot 的日志文件 , 日志在程序 中起到的作用是很大的 , 谁写的程序能不报错误呢, 日志就是一种让你快速找到错误…

Linux环境变量配合权限维持手法

前言&#xff1a; 权限维持的时候有其中有两种&#xff0c;一种是alias别名、第二种是prompt_command&#xff0c;这里我们可以将其添加到环境变量中&#xff0c;每次运行的时候都可以使用&#xff0c;从而达到权限控制的效果&#xff0c;而不是临时执行的效果。 环境变量&am…

harbor仓库的搭建

harbor仓库的搭建 前言一、准备二、registry私有仓库拉取registry镜像上传镜像下载镜像添加私有仓库解析配置使用非加密端口拉取镜像 三、仓库加密域名保持一致部署客户端证书&#xff0c;不然会报错验证仓库认证删除registry&#xff0c;重建登录仓库&#xff0c;不然无法上传…

[论文阅读笔记76]GPT Understands, Too(P-tuning)

1. 基本信息 题目论文作者与单位来源年份GPT Understands, Too清华大学 Citations, References 论文链接&#xff1a;https://arxiv.org/pdf/2103.10385.pdf 论文代码&#xff1a; 2. 要点 研究主题问题背景核心方法流程亮点数据集结论论文类型关键字微调大模型采用传统微…

css空间转换

目录 1. 3D移动 translate3d 1.1 三维坐标系 1.2 3D移动 translate3d 1.3 透视 perspective 1.4 translateZ 2. 3D旋转 rotate3d 2.1 左手法则-判断元素旋转方向的取值正负 3. 3D呈现 transform-style【***】 4. 3D缩放 transform:scale3d 1. 3D移动 translate3d …

nacos运行报错-jar: file does not existCan‘t retrieve image ID from build stream

一、问题 Deploying nacos Dockerfile: ruoyi-visual/ruoyi-nacos/Dockerfile… Building image… Preparing build context archive… [>]211/211 files DoneSending build context to Docker daemon… [>] 6.099MB DoneStep 1/8 : FROM openjdk:11---> 5505a9a39df…

chatgpt赋能python:用Python创建股票池

用Python创建股票池 介绍 如果你是一位投资者&#xff0c;你一定知道股票池是什么。它是一个包含一组股票的集合&#xff0c;使投资者能够跟踪和管理他们的投资组合。这些股票可以根据各种因素分类&#xff0c;例如行业&#xff0c;市值&#xff0c;收入增长等。 Python是一…

Oracle的学习心得和知识总结(二十六)|Oracle数据库Real Application Testing测试指南(数据库回放)

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《Oracle Database SQL Language Reference》 2、参考书籍&#xff1a;《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

学习HCIP的day.13

目录 IPV6 一、特征-升级点 二、IPV6地址 三、IPV6地址分类 1、单播地址 2、多播地址 四、协议 五、思科配置 1、接口配置IPV6的单播地址 2、IPV6的ACL 3、IPV6的单播路由协议 4、IPV4和IPV6共存 六、华为IPV6配置 1、静态 2、OSPF 3、BGP 4、IPV4和IPV6共存…

我的内网渗透-提权大法

拿到shell之后乱码解决 chcp 65001 #将编码设置为UTF-8的编码 出现这个提示就是切换成功&#xff0c;后面也是可以正常显示的 提权 方法一&#xff1a; 新版本的kali直接getsystem&#xff0c;可以提权成功&#xff08;有时候可以&#xff0c;有时候不可以&#xff09; mete…

chatgpt赋能python:Python循环3次的方法

Python循环3次的方法 循环是编程中经常用到的一个基本操作&#xff0c;可以让相同的代码运行多次。在Python中&#xff0c;循环也是极其重要的&#xff0c;其中最常用的是for和while循环。在本文中&#xff0c;我们将介绍如何使用Python循环3次。 使用for循环 使用for循环是…

电气器件系列三十八:耐压测试仪2

某型号官方资料&#xff1a; 系列耐压测试仪是测量耐压强度的仪器&#xff0c;可以直观、准确、快速地测试各种被测对象的击穿电压、漏电流等电气安全性能指标&#xff0c;并可以作为高压源用来测试元器件和整机性能。 本系列测试仪符合如下标准&#xff1a;家用电器类标准(IE…

响应式网页

解决方案&#xff1a; 媒体查询 max-width 最大宽度 <768 (从大到小) min-width 最小宽度 >768 (从小到大) media(条件){html{background-color: green;} } 需求&#xff1a; 默认网页前景色是灰色屏幕亮度大于等于768px&#xff0c;网页背景色是粉色屏幕亮度大于…

谈谈GPT-4文本代码降本减料引起的质量下降

先是少数用户提出质疑&#xff0c;随后大量网友表示自己也注意到了&#xff0c;还贴出不少证据。 有人反馈&#xff0c;把GPT-4的3小时25条对话额度一口气用完了&#xff0c;都没解决自己的代码问题。 无奈切换到GPT-3.5&#xff0c;反倒解决了。 总结下大家的反馈&#xff0c…

gitlab+jenkins+harbor实现CI/CD(2)——初级

文章目录 一、docker git安装二、jenkins使用步骤创建项目在jenkins主机获取密钥 三、实时触发构建四、整合harbor仓库 一、docker git安装 git安装 yum install -y gitjenkins主机上安装docker-ce [rootvm6 yum.repos.d]# yum install -y docker-ce [rootvm6 ~]# systemctl…

01-抒写代码之诗:Golang 关键字的文学探索

&#x1f4c3;个人主页&#xff1a;个人主页 &#x1f525;系列专栏&#xff1a;Golang基础 &#x1f4ac;Go&#xff08;又称Golang&#xff09;是由Google开发的开源编程语言。它结合了静态类型的安全性和动态语言的灵活性&#xff0c;拥有高效的并发编程能力和简洁的语法。G…

chatgpt赋能python:Python如何开三次方根

Python如何开三次方根 Python是一种强大的编程语言&#xff0c;它被广泛用于数据科学、机器学习、Web开发和自动化等领域。在这篇文章中&#xff0c;我们将介绍如何用Python开三次方根。 什么是三次方根&#xff1f; 三次方根是一个数学术语&#xff0c;表示一个数的立方根。…