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

【C语言基础】分享近期学习到的volatile关键字、__NOP__()函数以及# #if 1 #endif

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处

文章目录

  • volatile的使用方法
  • __NOP__()是什么函数?
  • #if 1 #endif


volatile的使用方法

volatile的作用: 当我们在使用C语言时,volatile关键字用于告诉编译器不要对某个变量进行优化。它通常用于修饰那些可能被硬件设备、中断或其它线程修改的变量。

下面通过使用volatile关键字的示例代码进行说明:

volatile int counter = 0;
void incrementCounter() {counter++;}int main() {printf("Initial counter value: %d\n", counter);incrementCounter();printf("Counter after increment: %d\n", counter);return 0;}

代码解释: 在上述代码中,counter变量被声明为volatile int类型。这意味着编译器不会对counter进行任何优化,以确保每次对counter的读取和修改都是直接从内存中进行,而不是从寄存器或其它缓存中读取。
在一些特定的场景下,例如在嵌入式系统中操作硬件寄存器或处理中断时,使用volatile关键字非常重要。它确保我们在读取和修改变量时的可见性和一致性,避免了编译器可能进行的优化,从而保证了代码的正确性。
需要注意的是,volatile关键字仅仅用于告诉编译器不要对变量进行优化,它并不能解决所有的并发多线程问题。对于需要实现同步和互斥的场景,我们仍然需要使用适当的同步机制(如互斥锁或原子操作)来保证线程安全。
参考:https://www.runoob.com/w3cnote/c-volatile-keyword.html

NOP()是什么函数?

NOP()是什么? __NOP() 是一个内联汇编指令,用于在一些特定的嵌入式系统中执行空操作(no operation),相当于一个延时函数
具体来说,__NOP__() 是一个特殊的汇编指令,它告诉处理器不执行任何操作,即产生一个空的机器指令。这个指令通常用于延迟一段时间或调整代码的执行速度。
使用条件:当使用_nop_()函数(可理解为软件延时)时,必须在开头添加头文件#include<intrins.h>
延时大小:而_nop_()函数的空操作产生的时间与晶振有关,用stc-isp软件,自动给你计算出来的
代码示例:

//100us
void Delay100us()		//@12.000MHz
{unsigned char i;_nop_();i = 47;while (--i);
}

#if 1 #endif

#if 1#endif 是条件编译的预处理指令。在这个示例中,#if 1 表示始终为真的条件,因为 1
代表真值。所以,#if 1 后面的代码块将会被编译,而 #endif 表示条件编译的结束。
可以使用条件编译来在编译时根据条件包含或排除一段代码。当条件为真时,被包含在 #if#endif 之间的代码将被编译;当条件为假时,这段代码将被忽略,不会参与编译。
在这个简单的示例中,#if 1 的条件为真,所以包含在这个条件下的代码块将被编译。如果将条件改为 #if 0,则条件为假,#if 0 和 #endif 之间的代码块将被忽略,不会参与编译。
条件编译可以用于在不同的情况下选择性地包含或排除代码,例如根据不同的操作系统、平台或编译器选项进行编译配置。

在这里插入图片描述

相关文章:

【C语言基础】分享近期学习到的volatile关键字、__NOP__()函数以及# #if 1 #endif

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…...

docker容器自启动

场景 当服务器关机重启后&#xff0c;docker容器每次都要去docker start 容器id 怎么可以下次让它自启动呢&#xff1f; 解决 先 # docker ps -a 查到之前启动过的容器id # docker update --restartalways 容器id重启后&#xff0c;reboot&#xff0c;就不用再单独去启动容…...

【C++】:模板的使用

目录 1、泛型编程 2、函数模板 2.1、函数模板概念 2.2、函数模板格式 2.3、函数模板的原理 2.4、函数模板的实例化 2.6、模板参数的匹配原则 3、类模板 3.1、 类模板的定义格式 3.2、 类模板的实例化 4、非类型模板参数 5、模板的特化 5.1、函数模板特化 5.2、类模…...

Springboot框架中使用 Redis + Lua 脚本进行限流功能

Springboot框架中使用 Redis Lua 脚本进行限流功能 限流是一种用于控制系统资源利用率或确保服务质量的策略。在Web应用中&#xff0c;限流通常用于控制接口请求的频率&#xff0c;防止过多的请求导致系统负载过大或者防止恶意攻击。 什么是限流&#xff1f; 限流是一种通过…...

【nlp】2.5(cpu version) 人名分类器实战项目(对比RNN、LSTM、GRU模型)

人名分类器实战项目 0 项目说明1 案例介绍2 案例步骤2.1 导入必备的工具包2.2 数据预处理2.2.1 获取常用的字符数量2.2.2 国家名种类数和个数2.2.3 读数据到python环境中2.2.4 构建数据源NameClassDataset2.2.5 构建迭代器遍历数据2.3 构建RNN及其变体模型2.3.1 构建RNN模型2.3…...

记录基于scapy构造ClientHello报文的尝试

最近有个需求就是用scapy构造https的client hello报文&#xff0c;由用户指定servername构造对应的报文。网上对于此的资料甚少&#xff0c;有的也是怎么去解析https报文&#xff0c;但是对于如果构造基本上没有找到相关的资料。 一直觉得最好的老师就是Python的help功能和dir功…...

程序设计实践学习笔记

第1题 题目描述 创建一个返回四舍五入到最接近整数的分数之和的函数。在矩阵中有每行的第一个数字表示分子&#xff0c;第二个数子表示分母,挑战者需要将该分数的结果进行四舍五入并将矩阵中所有分数结果总和进行返回。 输入输出格式 输入格式 数字 N 表示的是矩阵的行数。…...

Ubuntu中apt-get update显示域名解析失败

第一步 检查主机->虚拟机能否ping成功 ping 红色框中的IPv4地址 能通&#xff0c;表示虚拟机ip配置成功;否则&#xff0c;需要先配置虚拟机ip 第二步 检查是否能ping成功百度网址 ping www.baidu.com 若不成功&#xff0c;可能原因 虚拟机没联网&#xff0c;打开火狐浏览器…...

go学习之简单项目

项目 文章目录 项目1.项目开发流程图2.家庭收支记账软件项目2&#xff09;项目代码实现3&#xff09;具体功能实现 3.客户信息管理系统1&#xff09;项目需求说明2&#xff09;界面设计3&#xff09;项目框架图4&#xff09;流程5&#xff09;完成显示客户列表的功能6&#xff…...

代码随想录二刷 | 数组 | 总结篇

代码随想录二刷 &#xff5c; 数组 &#xff5c; 总结篇 基础知识二分查找移除元素有序数组的平方长度最小的数组最小覆盖子串螺旋数组 基础知识 定义&#xff1a;数组是存放在连续内存空间上的相同类型数据的集合 特点&#xff1a; 数组下标从 0 开始数组内存空间的地址是连…...

go test 命令详解

文章目录 1.简介2.test flag3.test/binary flags4.常用选项5.示例参考文献 1.简介 go test 是 Go 用来执行测试函数&#xff08;test function&#xff09;、基准函数&#xff08;benchmark function&#xff09;和示例函数&#xff08;example function&#xff09;的命令。 …...

【Mysql学习笔记】1 - Mysql入门

一、Mysql5.7安装配置 下载后会得到zip 安装文件解压的路径最好不要有中文和空格这里我解压到 D:\hspmysql\mysql-5.7.19-winx64 目录下 【根据自己的情况来指定目录,尽量选择空间大的盘】 添加环境变量 : 电脑-属性-高级系统设置-环境变量&#xff0c;在Path 环境变量增加mysq…...

sentinel 网关

网关简介 大家都都知道在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f;如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去调用。 这样的架构&#xff0c;会存在…...

常见面试题-MySQL的Explain执行计划

了解 Explain 执行计划吗&#xff1f; 答&#xff1a; explain 语句可以帮助我们查看查询语句的具体执行计划。 explain 查出来的各列含义如下&#xff1a; id&#xff1a;在一个大的查询语句中&#xff0c;每个 select 关键字都对应一个唯一的 id select_type&#xff1a;…...

SpringBoot静态资源配置

项目中 SSM中配置 第一种&#xff1a;配置文件中 <mvc:resources mapping"/js/**" location"/js/"/> <mvc:resources mapping"/css/**" location"/css/"/> <mvc:resources mapping"/html/**" location&q…...

Java拼图

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 创建一个代码类 和一个运行类 代码如下&#xff1a; package heima;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import jav…...

Linux 怎样通过win 远程桌面连接链接Linux后台服务器的可视化图形界面

目的概述&#xff1a;因不想后台直接操作&#xff08;操作不便&#xff09;&#xff0c;所以想到能否基于xrdp协议服务利用 win自带的远程桌面服务&#xff0c;链接到后台&#xff0c;类似于vnc的使用方式&#xff0c;涉及操作系统版本&#xff1a;win11 、 CentOS 7.4 、CentO…...

Java 实现随机图形

要求 定义4个类&#xff0c;MyShape、MyLine、MyRectangle和MyOval&#xff0c;其中MyShape是其他三个类的父类。MyShape为抽象类&#xff0c;包括图形位置的四个坐标&#xff1b;一个无参的构造方法&#xff0c;将所有的坐标设置为0&#xff1b;一个带参的构造函数&#xff0…...

java 读写文件的代码。

java 读写文件的代码。 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStr…...

如何使用贝锐花生壳内网穿透远程访问JupyterNotebook?

在数据科学领域&#xff0c;Jupyter Notebook 已成为处理数据的必备工具。 其用途包括数据清理和探索、可视化、机器学习和大数据分析。Jupyter Notebook的安装非常简单&#xff0c;如果你是小白&#xff0c;那么建议你通过安装Anaconda来解决Jupyter Notebook的安装问题&#…...

Unity项目实战:用TriLib插件动态加载FBX模型,5分钟搞定外部资源读取

Unity项目实战&#xff1a;用TriLib插件高效加载外部FBX模型的完整指南在VR展示、产品配置器等需要动态加载用户上传模型的场景中&#xff0c;如何快速实现外部FBX文件的读取是许多Unity开发者面临的挑战。传统的手动导入方式不仅效率低下&#xff0c;更无法满足运行时动态加载…...

ABS+神经网络:端到端宇宙学参数推断新范式解析

1. 项目概述&#xff1a;当ABS遇上神经网络&#xff0c;一个端到端宇宙学参数推断新范式的诞生 在宇宙学研究的核心地带&#xff0c;有一项任务既令人着迷又充满挑战&#xff1a;如何从宇宙微波背景&#xff08;CMB&#xff09;这张宇宙婴儿时期的“照片”中&#xff0c;精准地…...

Unity中文语言包安装失败?手动部署全流程详解

1. 为什么Unity编辑器中文语言包总在安装时“卡住”或报错&#xff1f; Unity编辑器自带多语言支持&#xff0c;但中文语言包的安装过程却常年被开发者吐槽——点开Preferences → Localization → Install Language Pack&#xff0c;选中Chinese (Simplified)&#xff0c;点击…...

LinkSwift:九大网盘直链下载助手终极指南,告别限速烦恼

LinkSwift&#xff1a;九大网盘直链下载助手终极指南&#xff0c;告别限速烦恼 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动…...

告别U盘!用CentOS 7.9 + iPXE + dnsmasq搭建一个能同时装CentOS 7、AlmaLinux 8和Ubuntu 22.04的万能PXE服务器

打造全能PXE装机服务器&#xff1a;CentOS 7.9iPXEdnsmasq混合系统部署指南 当机房里的服务器数量超过两位数时&#xff0c;U盘安装系统就像用滴管给游泳池注水——效率低得令人发指。我曾用三个通宵手动安装了50台服务器&#xff0c;直到发现PXE网络装机这个"工业级"…...

如何获取VMware Workstation Pro 17免费许可证密钥:完整实践指南

如何获取VMware Workstation Pro 17免费许可证密钥&#xff1a;完整实践指南 【免费下载链接】VMware-Workstation-Pro-17-Licence-Keys Free VMware Workstation Pro 17 full license keys. Weve meticulously organized thousands of keys, catering to all major versions o…...

5G O-RAN网络智能运维:基于随机森林的异常检测与切换优化实战

1. 项目概述&#xff1a;当5G网络学会“未卜先知”在5G乃至未来6G网络的运维战场上&#xff0c;故障处理正经历一场从“事后救火”到“事前预警”的深刻变革。传统基于静态阈值的告警系统&#xff0c;就像在高速公路上设置固定的限速牌&#xff0c;一旦遇到雨雪、拥堵等复杂路况…...

UE5 PhysicsControl物理动画入门:手把手教你用蓝图控制骨骼网格体(附完整配置流程)

UE5 PhysicsControl物理动画实战&#xff1a;从零构建骨骼动态模拟系统第一次在Unreal Engine 5的内容示例中看到角色布料自然飘动、头发随奔跑起伏的物理效果时&#xff0c;那种震撼感至今难忘。作为技术美术师&#xff0c;我们常需要在角色动画中追求这种"次世代质感&qu…...

ComfyUI-Manager深度解析:AI工作流扩展管理系统的架构设计与性能优化

ComfyUI-Manager深度解析&#xff1a;AI工作流扩展管理系统的架构设计与性能优化 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable…...

HHEML:基于FPGA硬件加速的边缘隐私保护机器学习框架

1. 项目概述&#xff1a;当边缘计算遇上隐私保护&#xff0c;一场硬件加速的革新在医疗影像分析、智能门禁、工业质检这些场景里&#xff0c;你肯定不希望自己的X光片、人脸数据或者生产线上的瑕疵图片&#xff0c;在传到云端服务器做AI推理时&#xff0c;被“有心人”看个精光…...