#与##的用法

#

作用: 左右加双引号,使其变成字符串

#的作用:是在形参左右各加双引号,使它变成字符串。#define   STR(param)    #paramchar  *pStr = STR(hello); // 展开后 char *pStr = “hello”;

##

作用:胶水,使2个粘合在一起。

#define def_u32_array(__name, __size)     uint32_t array_##__name[__size];def_u32_array(sample_buffer, 64)
展开后
uint32_t array_sample_buffer[64];#define log_info(__STRING, ...)    printf(__STRING,##__VA_ARGS__)
printf("------------------------------------\r\n");
printf(" Cycle Count : %d", total_cycle_cnt);

...

作用:在代码里运行。

#define safe_atom_code(...)                          \{                                            \uint32_t int_flag = __disable_irq();     \__VA_ARGS__                              \__set_PRIMASK(int_flag);                 \}这里定义了一个宏"safe_atom_code()",在括号内,无论你填写任何内容,
都会被无条件的放置到“__VA_ARGS__”所在的位置,你可以认为括
号里的“...”实际上就是对应"__VA_ARGS__"。比如,我们可以写下这样的代码:/**\fn          void wr_dat (uint16_t dat)\brief       Write data to the LCD controller\param[in]   dat  Data to write
*/
static __inline void wr_dat (uint_fast16_t dat) 
{safe_atom_code(LCD_CS(0);GLCD_PORT->DAT = (dat >>   8);   /* Write D8..D15 */GLCD_PORT->DAT = (dat & 0xFF);   /* Write D0..D7 */LCD_CS(1);)
}#define XXXX_INIT(...)    xxxx_init((NULL,##__VA_ARGS__))

#define EXAMPLE(...) ( 默认值 ,##__VA_ARGS__)

C语言中几种特殊标准定义和用法

static关键字:在C语言中,static关键字用于定义静态变量、静态函数和静态全局变量。静态变量在函数内部定义时,其值在函数调用结束后仍然保持不变;静态函数只能在声明它的源文件中使用;静态全局变量的作用域限制在声明它的源文件中。const关键字:const关键字用于定义常量,即不可修改的变量。使用const关键字可以提高代码的可读性和可维护性,同时可以避免程序中某些变量被误修改的风险。volatile关键字:volatile关键字用于定义易变变量,即在程序执行过程中可能被意外修改的变量。使用volatile关键字可以告诉编译器,该变量的值可能会在意料之外的时候被修改,从而保证程序的正确性。restrict关键字:restrict关键字用于告诉编译器,指针变量是唯一访问某个内存区域的指针。通过使用restrict关键字,编译器可以进行更多的优化,提高程序的性能。inline函数:inline函数用于定义内联函数,即将函数的定义直接插入到调用函数的地方,从而减少函数调用的开销。使用inline函数可以提高程序的执行效率。
C语言的发展历史可以分为多个阶段,每个阶段都对应一个标准。C语言的标准化是为了保证不同编译器、不同操作系统下的程序能够有一致的行为,同时也方便程序员进行交流和开发。本文将介绍C语言的几个标准及其主要特点。
一、K&R C
K&R C 是 C语言的第一个标准,由 C语言的创始人 Dennis Ritchie 和 Brian Kernighan 于 1978 年在其著作《The C Programming Language》中定义。K&R C 标准包含了 C语言的基本语法、数据类型、运算符等,但是并不是完整的语言规范,缺少了一些重要的特性,例如函数原型、结构体等。因此,K&R C 标准已经过时,不再被广泛使用。
二、ANSI C
ANSI C 是 C语言的第二个标准,由美国国家标准协会(ANSI)于 1983 年发布。该标准定义了 C语言的全部语法、数据类型、库函数等,是 C语言的第一个完整的规范。ANSI C 标准还引入了一些新特性,例如函数原型、void 类型、const 限定符等。ANSI C 标准被广泛采用,成为了 C语言的主流标准。
三、C89/C90
C89/C90 是 ISO/IEC 9899 标准,也是 ANSI C 的国际标准版本,于 1989 年发布。该标准与 ANSI C 基本一致,但是对于一些问题进行了更严格的定义,例如字符集、浮点数计算等。C89/C90 标准成为了 C语言的主流标准,并被广泛应用于各个领域。
四、C99
C99 是 ISO/IEC 9899:1999 标准,于 1999 年发布。C99 标准对 C语言进行了大量的扩展和改进,引入了很多新特性,例如布尔类型、复数类型、变长数组、标准宏等。C99 标准还修正了一些 C89/C90 标准中的错误和不足之处,使得 C语言更加完善和健壮。C99 标准在学术界和一些特定领域得到了广泛的应用,但在工业界的普及程度相对较低。
五、C11
C11 是 ISO/IEC 9899:2011 标准,于 2011 年发布。C11 标准在 C99 基础上进行了进一步的扩展和改进,包括了一些新特性,例如泛型宏、多线程支持、_Static_assert 等。C11 标准对于一些早期 C标准中存在的问题进行了修正,使得 C语言更加健壮和安全。C11 标准在工业界的普及程度相对较低,但已经被一些编译器支持。
六、C17
C17 是 ISO/IEC 9899:2018 标准,于 2018 年发布。C17 标准在 C11 基础上进行了一些小的修订和更新,主要是对标准库进行了一些改进和扩展。C17 标准对于C语言本身的特性并没有做出太大的改变,主要是对于一些库函数进行了更新和扩展。C17 标准目前还比较新,尚未得到广泛的应用。总的来说,C语言的标准化历程经历了多个阶段,每个阶段都对应一个标准。从最初的 K&R C 到后来的 ANSI C、C89/C90、C99、C11、C17 等版本,C语言的特性逐渐得到完善和改进,同时也保证了不同编译器、不同操作系统下的程序能够有一致的行为。C语言的标准化是保证程序员能够更加规范地编写程序、更加方便地进行交流和开发的重要保障。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python函数进阶:探索高级函数特性与技巧

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 Python中的函数不仅仅是…

【23种设计模式】组合模式【⭐】

个人主页:金鳞踏雨 个人简介:大家好,我是金鳞,一个初出茅庐的Java小白 目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客&am…

AjaxJavaScriptcss模仿百度一下模糊查询功能

1、效果 如下图所示,我们在输入大学时,程序会到后端查询名字中包含大学的数据,并展示到前端页面。 用户选择一个大学,该大学值会被赋值到input表单,同时关闭下拉表单; 当页面展示的数据都不符合条件时&…

【八大经典排序算法】堆排序

【八大经典排序算法】堆排序 一、概述二、思路解读三、代码实现(大堆为例) 一、概述 堆排序是J.W.J. Williams于1964年提出的。他提出了一种利用堆的数据结构进行排序的算法,并将其称为堆排序。堆排序是基于选择排序的一种改进,通…

面试题:问js的forEach和map的区别

前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 【国庆头像】- 国庆爱国 程序员头像!总有一款适合你! 前言 为什么要写这么一篇文章,原因是今天下午水群的时候&…

泰尔指数案例分析

泰尔指数是一种衡量‘不平均’的指数,比如用于衡量‘贫富差异’,也或者衡量大气污染的水平是否一致,二氧化碳排放水平差异情况等。泰尔指数的数学原理是‘熵’,‘熵’是一种衡量数据‘有序性’的指标,当‘熵’值越大时…

184_Python 在 Excel 和 Power BI 绘制堆积瀑布图

184_Python 在 Excel 和 Power BI 绘制堆积瀑布图 一、背景 在 2023 年 8 月 22 日 微软 Excel 官方宣布:在 Excel 原生内置的支持了 Python。博客原文 笔者第一时间就更新到了 Excel 的预览版,通过了漫长等待分发,现在可以体验了&#xf…

Linux UDP编程流程

文章目录 UDP编程流程UDP协议无连接的特点UDP协议数据报的特点 UDP编程流程 UDP 提供的是无连接、不可靠的、数据报服务。服务器端和客户端没有什么本质上的区别。编程流程如下: socket()用来创建套接字,使用 udp 协议时,选择数据报服务 SOC…

扔掉你的开发板,跟我玩Mcore-全志h616

本文转载自WhyCan Forum(哇酷开发者社区): https://whycan.com/t_10024.html 作者leefei 这是一个1.69寸触摸小电视。使用全志H616芯片,板上硬件有mpu6050陀螺仪,USB转ttl调试串口,一个USB接口,WIFI&蓝牙&#x…

mysql 备份和还原 mysqldump

因window系统为例 在mysql安装目录中的bin目录下 cmd 备份 备份一个数据库 mysqldump -uroot -h hostname -p 数据库名 > 备份的文件名.sql 备份部分表 mysqldump -uroot -h hostname -p 数据库名 [表 [表2…]] > 备份的文件名.sql ## 多个表 空格隔开,中间…

jvm的调优工具

1. jps 查看进程信息 2. jstack 查看进程的线程 59560为进程id 产生了死锁就可以jstack查看了 详细用途可以看用途 3. jmap 如何使用dump文件看下 查看 4.jstat 空间占用和次数 5. jconsole可视化工具 各种使用情况,以及死锁检测 6. visualvm可视化工具…

用微服务平台框架,实现高效的流程化办公!

想要实现流程化办公,可以用什么样的软件平台实现?随着市场竞争越来越激烈,很多企业会采用低代码技术平台实现高效管理企业的内部资源,从而减少很多繁琐工作和时间,实现提质增效的目的。流辰信息助力大家采用微服务平台…

商业大厦为什么要烟感监控?一篇看懂

烟感监控在现代商业大厦的安全体系中扮演着至关重要的角色。随着城市化的不断发展和商业大厦的不断增多,建筑物内的火灾风险也相应增加。 因此,采取有效的烟感监控措施,以及建立快速响应火警的机制,对于保护人员生命安全和财产安全…

性能测试 —— Jmeter 常用三种定时器

1、同步定时器 位置:HTTP请求->定时器->Synchronizing Timer 当需要进行大量用户的并发测试时,为了让用户能真正的同时执行,添加同步定时器,用户阻塞线程,知道线程数达到预先配置的数值,才开始执行…

Navicat 连接数据库出现1251

原因: MySQL8.0以上版本的加密方式和MySQL5.0的不一样,所以Navicat连接MySQL会报错。 1251 - Client does not support authentication protocol requested by server; consider upgrading MysQl. cdient– 修改远程连接权限 % 可换为自己的电脑ip GRAN…

2023 Google 开发者大会 – 惊喜来袭

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! 2023 Google 开发者大会 – 惊喜来袭 2023 Google 开发者大会面向开发者和科技爱好者展示最新产品和平台的年度盛会。今年Google大会为大家提供了丰富的学习资源&…

树和二叉树

1、树的定义2、树的基本术语3、二叉树的定义4、二叉树的性质和存储结构5、满二叉树、完全二叉树**完全二叉树的性质** 6、二叉树的存储顺序存储结构链式存储结构 7、遍历二叉树演示8、二叉树相关算法(1)遍历二叉树递归算法实现(2)…

mac电脑版矢量绘图推荐 Sketch for mac最新中文

Sketch软件特色 1、数字设计工具包 在Sketch中使用暗模式查找焦点。点亮灯光,失去分心,看着你的设计变得生动,让你专注于最重要的事情 - 你的工作。 2、为未来重新设计 Sketch 带来全新外观和更多。完全重新设计的界面使设计过程比以往更加…

人脸识别技术应用安全管理规定(试行)|企业采用人脸打卡方式,这4条规定值得关注

近日,为规范人脸识别技术应用,国家互联网信息办公室起草了,并向全社会公开征求意见。该规定一共列举了25条,企业如借助人脸识别技术采集考勤打卡数据,以下4条规定值得关注。 第四条 只有在具有特定的目的和充分的必要…

Python接口自动化测试post请求和get请求,获取请求返回值

引言 我们在做python接口自动化测试时,接口的请求方法有get,post等;get和post请求传参,和获取接口响应数据的方法; 请求接口为Post时,传参方法 我们在使用python中requests库做接口测试时,在做post接口测试…