当前位置: 首页 > news >正文

C语言基础语法复习07-c语言关键字的解释

对前一篇文章写点随笔:https://blog.csdn.net/weixin_43172531/article/details/132893176

基本数据类型(8种)和类型修饰符(4种):

void与指针*组合在一起才有具体实体意义。
void本身代表没有类型、没有实体,例如void main(void)。

char char[]为字符、字符串,应该是运算成本最高的类型,很多时候可以考虑强转为整数进行处理。
float double的运算代价也相对于整数更大,也可以尽量考虑转换为整数处理。浮点数还有精度损失问题,可以考虑转换为整数处理。定义结构体实现无限制精度,PI的几十种无穷级数展开公式等。
int与short、long、signed、unsigned等修饰符的组合。目前一般int都定义为32bit,long定义为cpu字长。更安全的方式是i64 ui64这种定义方式。
_Bool类型,兼容了bool,未明确类型size,老方案中定义bool为int时,可以存任意非0的代表true,_Bool类型不行了,只有0、1。
_Complex为复数,c99提供了内置的语法支持,实际在此之前也可以用自定义结构体实现。新增这个内置类型,可能是有些新的硬件内置了复数的存储和运算支持,可以更好地利用硬件获得更高的运行效率。这也是硬件、数据结构、算法三位一体的设计体现。
_Imaginary为纯虚数,一般编译器都不支持,实际可能存在某些硬件层面的考虑,但可被_Complex涵盖。

复杂类型(5种)

struct告诉编译器变量顺序存放。
union告诉编译器变量重叠存放。
enum常量定义。不要忽略null、count概念。
typedef类型别名。
sizeof获得类型的byte大小,编译期计算。

实际只有struct、union两种类型定义方式,实际也不是类型定义,只是基础类型或者组合类型的内存排列方式的描述。编译器在编译期根据用户的定义去解释操作代码如何访问内存。机器码层面是没有复杂类型概念的,只有01概念。其实也没有float、char的概念。但,为了效率,现代的高性能cpu、gpu、cpu可能在硬件层面对特定基础类型进行了优化,有了特定指令。因此,老的认知可能需要重新调整。

存储级别关键字(7种)

auto、static、register、extern、const、volatile、restrict都是对编译器的引导,与内存的存储位置、访问方式、优化方式、链接方式等相关。

跳转结构(4种)

return 存储到eax寄存器
continue:跳过for、while的一次循环,但不跳出循环
break:跳出for、while、switch
goto最基础最原始的跳转,基本很少用

分支结构(5种)

if 尽量不写复杂的判断,拆开判断不容出错。
else 尽量不省略任何分支,即使确定没有也写上,输出错误信息。
switch case:尽量用连续整数做case分支,涉及编译器优化问题。将if 字符串判断转换为switch enum代码。
default分支:不要忽略空这个概念。

循环结构(3种)

for尽量用for,不容易出错。for(;😉;效率较高
do{break;}while(…)与while(…){break;} 容易出错。有些适用的场景。

左值lvalue右值rvalue

感觉左值与指针对象概念类似,右值与地址值的概念类型。左值是有实体的内存对象,右值是存储在某个地方的值,或者某个对象的属性,并不是一个有实体的对象。

inline

inline内联函数,函数实现必须可见,简单说,inline函数必须在h文件中。
本质是给编译器在编译器一个内联的建议,一是减少函数调用的上下文切换成本,二是使得编译后的函数二进制码尽量内聚,不跨页,达到最优执行效率。
典型的面向编译器编程思想,实际也带了一点面向硬件编程的思想。
同时存在跨平台、编译器问题。
对调试有一定影响。

_Alignas _Alignof

内存访问效率相关。一般边界建议是cpu字长,例如64bit对应8byte边界对齐。
函数一般是0x10边界对齐。
页边界是4096,实际大内存申请使用,最优策略就是4096的整数倍,且边界地址就在4096.
大内存被申请时,不一定在缓存、内存中,实际操作系统要等到第一次被访问时才会分配映射到虚地址上。那么,尽量不memset 0内存,其实是一个蛮好的策略。

_Atomic _Thread_local

用得少,多线程,边界资源共享读写的问题,底层实现涉及硬件支持。参考典型模式即可。
我记得在很久以前有篇文章说cpp本质上不支持多线程安全,目前看来,硬件、语法、基础库都有扩展,估计已经解决了这个老问题。
_Atomic可以修饰原子变量,也可以修饰原子函数。保证操作不可中断。
atomic_fetch_add、atomic_load
C11 引入了 <threads.h> 头文件来支持线程的创建、终止和管理。

#include <threads.h>
int thread_function(void *arg) {return 0;
}
int main() {thrd_t thread;thrd_create(&thread, thread_function, NULL);thrd_join(thread, NULL);return 0;
}

互斥量mtx_t

mtx_t mutex;
int shared_resource = 0;
void access_resource() {mtx_lock(&mutex);// ... manipulate shared resource ...mtx_unlock(&mutex);
}

条件变量cnd_t

#include <threads.h>
mtx_t mutex;
cnd_t cond;
int data_ready = 0;
void producer() {// ... produce data ...mtx_lock(&mutex);data_ready = 1;cnd_signal(&cond);mtx_unlock(&mutex);
}
void consumer() {mtx_lock(&mutex);while (!data_ready) {cnd_wait(&cond, &mutex);}// ... consume data ...mtx_unlock(&mutex);
}

_Generic

语法:_Generic( expression, association-list )

#define TYPE_NAME(x) _Generic((x), \int: "int", \float: "float", \double: "double", \default: "other" \
)

感觉是为了弥补宏功能缺陷的。适用场景可以提高效率,将部分运行期开销转移到编译期。
不同的数值类型选择适当的函数版本,可以间接实现函数重载。

_Noreturn

明确函数的语义。避免编译报错、告警。

_Static_assert

编译期告警。方便进行代码的安全性检查,例如对位域、union、struct的内存分布进行编译期检查,避免跨平台出现问题。

相关文章:

C语言基础语法复习07-c语言关键字的解释

对前一篇文章写点随笔&#xff1a;https://blog.csdn.net/weixin_43172531/article/details/132893176 基本数据类型(8种)和类型修饰符(4种)&#xff1a; void与指针*组合在一起才有具体实体意义。 void本身代表没有类型、没有实体&#xff0c;例如void main(void)。 char c…...

阿里巴巴全店商品采集教程,阿里巴巴店铺所有商品接口(详解阿里巴巴店铺所有商品数据采集步骤方法和代码示例)

随着电商行业的快速发展&#xff0c;阿里巴巴已成为国内的电商平台之一&#xff0c;拥有着海量的商品资源。对于一些需要大量商品数据的商家或者需求方来说&#xff0c;阿里巴巴全店采集是非常必要的。本文将详细介绍阿里巴巴全店采集的步骤和技巧&#xff0c;帮助大家更好地完…...

Android 白天黑夜模式设置

白天黑夜模式是一种动态的UI模式,根据当前时间或用户设置的偏好,在白天和黑夜之间进行切换。它通过调整应用程序的颜色、亮度和其他可视化元素来提供更加舒适和易读的用户界面。 一、简单设置 UiModeManager 是用于管理和控制用户界面模式(UI Mode)。它提供了一组方法,允…...

FFMpeg zoompan 镜头聚焦和移动走位

案例 原始图片 # 输出帧数&#xff0c;默认25帧/秒&#xff0c;25*4 代表4秒 # s1280x80 # 输出视频比例&#xff0c;可以设置和输入图片大小一致 # zoom0.002 表示每帧放大的倍数&#xff0c;下面代码是25帧/每秒 * 4秒&#xff0c;共1000帧 # 最终是 0.002*25*4 0.2&…...

利用hutool工具类实现验证码功能

hutool工具类实现验证码 一.生成验证码二.校验验证码三.使用案例1.引入hutool工具类2.VerifyCodeResp接口响应体3.VerifyCodeController验证码工具类4.测试验证5.项目结构及源码下载 利用hutool工具类&#xff0c;可以很方便生成不同类型的验证码。这里简单记录下使用过程。 一…...

前端面试题: 请解释什么是函数的作用域?

今天做到了一道题&#xff1a;请解释什么是函数的作用域&#xff1f; 我给的答案是&#xff1a; 函数的作用域是指函数执行到内部后创建的数据空间&#xff0c;在函数的作用域内&#xff0c;let定义的变量的有效期为函数作用域 AI觉得我答得比较简单&#xff1a;回答基本正确&…...

华为云云服务器云耀L实例评测 | 华为云云服务器实例新品全面解析

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

Nginx配置SSL证书

1 Ubuntu 20.04 上安装 Nginx Nginx 发音 “engine x” ,是一个开源软件&#xff0c;高性能 HTTP 和反向代理服务器&#xff0c;用来在互联网上处理一些大型网站。它可以被用作独立网站服务器&#xff0c;负载均衡&#xff0c;内容缓存和针对 HTTP 和非 HTTP 的反向代理服务器。…...

一,安卓aosp源码编译环境搭建

系列文章目录 第一章 安卓aosp源码编译环境搭建 第二章 手机硬件参数介绍和校验算法 第三章 修改安卓aosp代码更改硬件参数 第四章 编译定制rom并刷机实现硬改(一) 第五章 编译定制rom并刷机实现硬改(二) 第六章 不root不magisk不xposed lsposed frida原生修改定位 第七章 安卓…...

video 视频编解码一些debug方法

文章目录 一、通过命令去获取一些数据1.2 确定我们xml配置文件: 二、查看我们芯片支持的编码能力三、通过log去获取信息 这个文章的主要内容是为了后期性能方面的debug, 设计到前期的bringup则没有 一、通过命令去获取一些数据 获取媒体相关的参数&#xff1a; # getprop |…...

中秋国庆假期——模板推荐

要说最近能让人开心的事情是什么?大概就是下周将迎来8天假&#xff0c;小编帮大家数了数还有11天&#xff0c;就要放中秋国庆的假期了。作为一个资深打工人&#xff0c;本周的日常即将变成&#xff1a;上班想放假、下班想放假、想放假… 但是宝子们要注意&#xff0c;大家在盼…...

【配代码演示】Cookie和Session的区别

一、共同之处&#xff1a; cookie和session都是用来跟踪浏览器用户身份的会话方式。 二、工作原理&#xff1a; 1.Cookie的工作原理 &#xff08;1&#xff09;浏览器端第一次发送请求到服务器端 &#xff08;2&#xff09;服务器端创建Cookie&#xff0c;该Cookie中包含用户的…...

【Linux初阶】信号入门2 | 信号阻塞、捕捉、保存

文章目录 ☀️前言☀️一、信号阻塞&#x1f33b;1.信号其他相关常见概念&#x1f33b;2.信号在内核中的表示 ☀️二、信号捕捉&#xff08;重点&#xff09;&#x1f33b;1.用户态 & 内核态&#x1f33b;2.如何判断进程处于用户态或内核态&#x1f33b;3.OS接口的访问方法…...

【已解决】:该该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)“按钮获取它的所有权。否则,请按“取消(C)“按钮以防损坏。

现象 启动VMware虚拟机&#xff0c;无法正常打开并出现以下信息&#xff1a; 原因 这是因为当运行一个“虚拟系统”时&#xff0c;为防止该系统被另外一个VMware程序打开&#xff0c;导致数据被修改或损坏&#xff0c;VMware会自动在该“虚拟系统”所在的文件夹下&#xff0c…...

系统架构常用的工具

HBase HBase是一个分布式的、面向列的开源数据库&#xff0c;该技术来源于 Fay Chang 所撰写的Google论文“Bigtable&#xff1a;一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统&#xff08;File System&#xff09;所提供的分布式数据存储一样&#xff…...

腾讯云2核4G服务器5M带宽 218元一年 优惠价格明细表

腾讯云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS&#xff0c;轻量2核4G5M带宽服务器218元一年&#xff1a; 腾讯云2核4G服务器5M带宽收费 腾讯云2核4G服务器可以选择轻量应用服务器或者ECS云服务器&#xff0c;云服务器ECS是专业级云服务器&#xff0c;大多数使用…...

[C++ 网络协议] 多播与广播

目录 1. 多播 1.1 多播的使用情形 1.2 多播的原理 1.3 如何实现多播 1.4 多播的代码实现 2. 广播 2.1 广播与多播的区别 2.2 广播的分类 2.3 实现广播 1. 多播 1.1 多播的使用情形 考虑一种情形&#xff0c;你要向10000名用户发送数据&#xff0c;此时如果用TCP提供服…...

IOS17正式版今日发布

北京时间9月19日凌晨&#xff0c;苹果公司正式向全球用户推送了期待已久的iOS 17正式版。此次更新为iPhone带来了多项激动人心的功能&#xff0c;包括对“电话”、“信息”、FaceTime通话的重大更新&#xff0c;“待机显示”以及音乐、小组件、Safari浏览器的升级等。 据了解&…...

2560. 打家劫舍 IV

沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统&#xff0c;所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大金额 。 给你一个整数数…...

java web中部署log4j.xml

标题&#xff1a;Java Web中部署log4j.xml 目录&#xff1a; 1. 介绍 2. 配置log4j.xml文件 3. 配置web.xml文件 4. 配置Spring框架 5. 配置Spring Bean 6. 总结 ## 1. 介绍 在Java Web开发中&#xff0c;日志记录是非常重要的一部分。log4j是一个常用的Java日志记录框架&am…...

【张兔兔送书第一期:考研必备书单】

考研书单必备 《数据结构与算法分析》《计算机网络&#xff1a;自顶向下方法》《现代操作系统》《深入理解计算机系统》《概率论基础教程&#xff08;原书第10版》《线性代数&#xff08;原书第10版&#xff09;》《线性代数及其应用》赠书活动 八九月的朋友圈刮起了一股晒通知…...

基于Spring Boot+ Vue的健身房管理系统与实现

小熊学Java全能学面试指南&#xff1a;https://javaxiaobear.cn 摘要 随着健身行业的快速发展&#xff0c;健身房管理系统成为了提高管理效率和用户体验的重要工具。本论文旨在设计与实现一种基于前后端分离的健身房管理系统&#xff0c;通过前后端分离的架构模式&#xff0c;…...

ThreadLocal线程局部变量

1.原理 ThreadLocal是用来保存当前线程数据的&#xff0c;每一个线程的内部都有一个ThreadLocalMap&#xff0c;当前这个map中存储了以当前ThreadLocal作键&#xff0c;具体的数据作值的一个个Entry对象。 为什么非得以ThreadLocal对象作键呢&#xff1f;因为一个线程可能使用了…...

C++ Primer (第五版)第一章习题部分答案

在我自学C过程中&#xff0c;我选择了CPrimer这本书&#xff0c;并对部分代码习题进行了求解以及运行结果。接下来几个月我将为大家定时按章节更新习题答案与运行结果: 目录 1.9编写程序,使用while循环将50到100的整数相加 1.10 除了运算符将运算对象的值增加1之外,还有一个…...

Python与GUI集成:零基础也能开发国际象棋游戏

引言&#xff1a; 国际象棋&#xff0c;作为世界上最受欢迎的棋类游戏之一&#xff0c;拥有丰富的策略和深度。但是&#xff0c;你知道自己可以使用Python来创建一个简单的国际象棋游戏并为其添加图形用户界面&#xff08;GUI&#xff09;吗&#xff1f;在本教程中&#xff0c…...

SaaS软件能保证数据安全吗?

SaaS软件能保证数据安全吗&#xff1f; 本文将要尝试从各个方面尽可能客观的去阐述这个问题&#xff0c;而不是简单自嗨式的说简道云平台如何保障数据安全。 建议先收藏起来慢慢品&#xff01; 01 SaaS安全到底是什么&#xff1f;——定义解读 本文所用SaaS平台>>>…...

方案:基于AI烟火识别与视频技术的秸秆焚烧智能化监控预警方案

一、方案背景 为严控秸秆露天焚烧&#xff0c;改善环境空气质量&#xff0c;各省相继发布秸秆禁烧工作内容。以安徽省为例&#xff0c;大气污染防治联席会议下发了该省2020年秸秆禁烧工作部署通知。2020年起&#xff0c;气象局将对全省秸秆焚烧火点实施卫星全年全时段监测&…...

phantomjs插件---实现通过链接生成网页截图

Phantomjs | PhantomJS 配置要求 windows下&#xff0c;安装完成phantomJS 设置phantomjs环境变量【也可直接使用phantomjs目录下的执行文件】 直接通过访问php文件执行/通过cmd命令行执行【phantomjs phantom_script.js】 linux下,安装完成phantomJS 设置phantomjs环境变量 直…...

SpringBoot分页实现查询数据

1.原生查询 1.1创建分页查询实体类 package com.itheima.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.List;//分页查询结果封装类 Data NoArgsConstructor AllArgsConstructor public class PageBean {pr…...

Jetson Xavier NX 与飞控(Pixhawk 4 Mini)实现串口通信

一、飞控端配置 首先对 Pixhawk 4 Mini 烧录固件参考 Kakute H7 刷写 px4 固件_想要个小姑娘的博客-CSDN博客 烧录完成后打开 QGroundControl&#xff0c;进入参数设置并搜索 MAV&#xff0c;如下所示 然后修改 MAV_1_CONFIG&#xff0c;修改为自己想要连接机载电脑&#xf…...

网站建设丶金手指B排名14/百度收录提交网站后多久收录

在适配器模式中引入了一个被称为适配器(Adapter)的包装类&#xff0c;而它所包装 的对象称为适配者(Adaptee)&#xff0c;即被适配的类。适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说&#xff1a;当客户类调用适配器的方法时&#xff0c;在适配器类…...

p2p网站建设的步骤过程/下拉关键词排名

零拷贝 零拷贝不是真的0次拷贝&#xff0c;而是减少拷贝次数&#xff0c;所有的零拷贝分为两个层面&#xff1a; &#xff08;1&#xff09;OS级别 传统IO&#xff1a; 硬盘->内核缓冲区->用户缓冲区->内核缓冲区->socket缓冲区-》socket缓冲区-》网卡&#xf…...

做p2p网站的公司/seo建设招商

//这张表存放的是所有单据模板的信息表 如果不知道单据模板的信息后可在数据库中查询PUB_BILLTEMPLET//这张表是打印模板的表改模板可以再此表修改pub_print_template//获取表头某个字段的值getBillCardPanel().getHeadItem("kitarea").getValueObject()//获取当前登…...

wordpress主题king/html制作网站

综上&#xff0c;当监测的fd数量较小&#xff0c;且各个fd都很活跃的情况下&#xff0c;建议使用select和poll&#xff1b;当监听的fd数量较多&#xff0c;且单位时间仅部分fd活跃的情况下&#xff0c;使用epoll会明显提升性能。 select系统调用 select函数 1&#xff09;nfds…...

专业的模板建站企业/seo推广公司排名

Bootstrap资源: 兼容性不错的简洁BuiBootstrap后台管理系统模板 [url]http://www.js-css.cn/divcss/admin/bui-bootstrap[/url], 下载 [url]http://www.js-css.cn/a/css/template/admin/2013/1108/1023.html[/url] 值得收藏&#xff01;4个Bootstrap3开发的后台管理模板 [url]h…...

佛山微网站建设哪家专业/本地建站软件有哪些

在java1996年发布,当年12月即发布了java bean1.00-A,有什么用呢?通过统一的规范可以设置对象的值(get,set方法),这是最初的java bean;在实际企业开发中,需要实现事务,安全,分布式,javabean就不好用了.sun公司就开始往上面堆功能,这里java bean就复杂为EJB;EJB功能强大,但是太重…...