C语言进阶(一):宏函数内定义结构体
示例一:
#define SPD_LIST_HEAD_NOLOCK(name, type) \struct name { \struct type *first; \ struct type *last; \}
SPD_LIST_HEAD_NOLOCK(, scheduler)schedulerq;//宏函数调用,不用管结构体里面的内容。也不用管scheduler,它是一个结构体
//这句话的意思是struct name整个结构体改名为sqcheduler,两种理解方式
struct name{...}sqcheduler;//第一种
struct name sqcheduler;//第二种
补充知识:定义结构体变量最好是这样定义:struct name *sqcheduler,因为结构体变量作为函数形参进行传参时,是一定要传地址的,因为在调用函数后,在函数内部使用结构体变量需要用到结构体内部的变量。而访问结构体内部需要用"->",它可以理解是一个指针。所以结构体变量作为形参时必须要传地址。
SPD_LIST_HEAD_INIT_NOLOCK(&schedulerq);//不用管SPD_LIST_HEAD_INIT_NOLOCK,只需要知道结构体传参的形式
如果schedulerq不作为形参时,它实际是可以等于scheduler的
为了更好的理解,我把scheduler展示出来:
struct scheduler {int flag; int reschedule; int id;
};
现在,我们在SPD_LIST_HEAD_INIT_NOLOCK(&schedulerq);下面敲schedulerq时编译器会提示
这就更加验证了我的想法。
示例二:
#define SPD_LIST_HEAD_NOLOCK(name, type) \struct name { \struct type *first; \ struct type *last; \} name;
这种用法暂时不知道,知道在更新吧。
这样写是不会报错的,但是不能再定义:
SPD_LIST_HEAD_NOLOCK(, scheduler)name;
因为编译器会报错:
如果不加name呢?
SPD_LIST_HEAD_NOLOCK(, scheduler);
也不能,编译器会报:
示例二的用法暂时没有找到,如果有大神知道,请告知,我将万分感谢!
C语言进阶(一):宏函数内定义结构体相关推荐
- C语言中的宏函数与宏定义
目录 1.无参宏定义 1.1 无参数宏定义的格式: 1.2 使用说明: 2.带参宏定义 2.1 带参数宏定义的格式: 2.2 使用说明: 3.带参宏定义与函数调用的区别 4.头文件中常用的宏定义 5. ...
- 【C语言】七、函数(定义调用嵌套参数储存等)
这里写目录标题 1 函数的定义与调用 1.1 函数的定义 1.1.1 函数的分类 1.1.2 函数的定义 1.2 函数的返回值与函数类型 1.3 对被调用函数的说明和函数原型 函数声明 1.4 函数的 ...
- c 定义结构体时提示应输入声明_C语言结构体的坑很多,这6大方法千万要记住!...
本文福利在文末! C语言可谓是编程界的传奇语言,历经几十年,依然排名前列. 本文主要说的是C语言中的结构体,结构体是C语言中重要的一部分内容,也是C语言中常用的一种数据结构. 一.关于结构体在C语言中 ...
- C语言函数指针(结构体函数指针)
文章目录 20211126 这篇讲得好 参考文章1:C语言函数指针(指向函数的指针)详解 函数指针的定义形式: returnType (*pointerName)(param list); 示例代码: ...
- c语言怎么判定结构体有无数据,C语言中什么是结构体,怎么定义结构体。
为什么要用结构体? 没有结构体之前,C语言中,数据的组织依靠:变量+数组.最初最简单的时候,只需要使用基本数据类型来定义单个变量,需要几个就定义几个,后来有时候需要很多意义相关的变量这时候数组出现了. ...
- 三菱R系列PLC程序 全部采用ST语言编写,内部使用函数块和结构体,程序思路清晰
三菱R系列PLC程序 全部采用ST语言编写,内部使用函数块和结构体,程序思路清晰,简洁明了. 通过结构体和函数块的使用,可以使您在程序编写水平得到很大提高. ST语言是PLC后续的主流语言,是日后编程 ...
- c语言用typedef定义结构体,C语言结构体定义 typedef struct
c语言规范,定义结构体: typedef struct ANSWER_HEADER { u8 u8Type; u8 u8Code; u32 u32TimeStamp; struct ANSWER_HE ...
- c语言中定义结构体指针的作用,C语言结构体定义,使用及指针(1)
前言 C语言中的结构体作为一大难点,并且对于需要学习数据结构的同学来说,这个结构是每次上课都会遇到的,所以,我们只有更深层次的理解结构体的知识,才能更好的掌握数据结构 结构体用处 结构体到底有什么用? ...
- [黑马IOS自学第七篇]fets文件函数等,结构体,结构体数组,宏学习
一.fgets函数 fgets不能进行格式化输出输入 代码如下 <span style="font-size:18px;">//fgets()/*文件操作相关函数从键盘 ...
- 【☀️C语言函数传参の结构体数组篇☀️】
背景介绍 C语言中函数参数传递的两种方式("引用传递做函数参数"是C++的特性,C语言不支持.) (1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个 ...
最新文章
- docker 疑难杂症
- rm排除某个文件进行删除
- 【剑指offer】反转链表,C++实现(链表)
- mysqlsla日志分析工具
- hdfs web_ui深入讲解、服务启动日志分析、NN SNN关系
- Android数据的存储方式简介
- ubuntu11中卸载gnome3
- matlab 矩阵转置
- maven 常用命令
- 微信openid的生成规则研究
- 2021-2027全球与中国触控板市场现状及未来发展趋势
- 数据挖掘中的分类与预测
- 【杂货铺】中国房屋种类
- 门禁信息推送不了服务器,十牛校园门禁系统封闭化管理不封闭消息
- JavaSE-利用随机数制作的打怪游戏
- 05-数据科学的基础:数据收集之市场调查_01 市场调查概括
- 互联网人到最后拼的是体力
- 办公效率提升,八款功能强大的效率工具不容错过
- 论证掌握需求的重要性
- 来自滴滴、微博、唯品会、魅族、点评关于高可用架构实践分享