示例一:

#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语言进阶(一):宏函数内定义结构体相关推荐

  1. C语言中的宏函数与宏定义

    目录 1.无参宏定义 1.1 无参数宏定义的格式: 1.2 使用说明: 2.带参宏定义 2.1 带参数宏定义的格式: 2.2 使用说明: 3.带参宏定义与函数调用的区别 4.头文件中常用的宏定义 5. ...

  2. 【C语言】七、函数(定义调用嵌套参数储存等)

    这里写目录标题 1 函数的定义与调用 1.1 函数的定义 1.1.1 函数的分类 1.1.2 函数的定义 1.2 函数的返回值与函数类型 1.3 对被调用函数的说明和函数原型 函数声明 1.4 函数的 ...

  3. c 定义结构体时提示应输入声明_C语言结构体的坑很多,这6大方法千万要记住!...

    本文福利在文末! C语言可谓是编程界的传奇语言,历经几十年,依然排名前列. 本文主要说的是C语言中的结构体,结构体是C语言中重要的一部分内容,也是C语言中常用的一种数据结构. 一.关于结构体在C语言中 ...

  4. C语言函数指针(结构体函数指针)

    文章目录 20211126 这篇讲得好 参考文章1:C语言函数指针(指向函数的指针)详解 函数指针的定义形式: returnType (*pointerName)(param list); 示例代码: ...

  5. c语言怎么判定结构体有无数据,C语言中什么是结构体,怎么定义结构体。

    为什么要用结构体? 没有结构体之前,C语言中,数据的组织依靠:变量+数组.最初最简单的时候,只需要使用基本数据类型来定义单个变量,需要几个就定义几个,后来有时候需要很多意义相关的变量这时候数组出现了. ...

  6. 三菱R系列PLC程序 全部采用ST语言编写,内部使用函数块和结构体,程序思路清晰

    三菱R系列PLC程序 全部采用ST语言编写,内部使用函数块和结构体,程序思路清晰,简洁明了. 通过结构体和函数块的使用,可以使您在程序编写水平得到很大提高. ST语言是PLC后续的主流语言,是日后编程 ...

  7. c语言用typedef定义结构体,C语言结构体定义 typedef struct

    c语言规范,定义结构体: typedef struct ANSWER_HEADER { u8 u8Type; u8 u8Code; u32 u32TimeStamp; struct ANSWER_HE ...

  8. c语言中定义结构体指针的作用,C语言结构体定义,使用及指针(1)

    前言 C语言中的结构体作为一大难点,并且对于需要学习数据结构的同学来说,这个结构是每次上课都会遇到的,所以,我们只有更深层次的理解结构体的知识,才能更好的掌握数据结构 结构体用处 结构体到底有什么用? ...

  9. [黑马IOS自学第七篇]fets文件函数等,结构体,结构体数组,宏学习

    一.fgets函数 fgets不能进行格式化输出输入 代码如下 <span style="font-size:18px;">//fgets()/*文件操作相关函数从键盘 ...

  10. 【☀️C语言函数传参の结构体数组篇☀️】

    背景介绍 C语言中函数参数传递的两种方式("引用传递做函数参数"是C++的特性,C语言不支持.) (1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个 ...

最新文章

  1. docker 疑难杂症
  2. rm排除某个文件进行删除
  3. 【剑指offer】反转链表,C++实现(链表)
  4. mysqlsla日志分析工具
  5. hdfs web_ui深入讲解、服务启动日志分析、NN SNN关系
  6. Android数据的存储方式简介
  7. ubuntu11中卸载gnome3
  8. matlab 矩阵转置
  9. maven 常用命令
  10. 微信openid的生成规则研究
  11. 2021-2027全球与中国触控板市场现状及未来发展趋势
  12. 数据挖掘中的分类与预测
  13. 【杂货铺】中国房屋种类
  14. 门禁信息推送不了服务器,十牛校园门禁系统封闭化管理不封闭消息
  15. JavaSE-利用随机数制作的打怪游戏
  16. 05-数据科学的基础:数据收集之市场调查_01 市场调查概括
  17. 互联网人到最后拼的是体力
  18. 办公效率提升,八款功能强大的效率工具不容错过
  19. 论证掌握需求的重要性
  20. 来自滴滴、微博、唯品会、魅族、点评关于高可用架构实践分享

热门文章

  1. 已知二叉树的前序序列跟中序序列求后序序列(C语言)
  2. 高德地图web精准定位
  3. DM达梦DSC共享集群+DW(单机)
  4. TL-WR720n 硬改 16M rom
  5. WIN7,WIN10,WIN11怎么查看电脑操作系统位数
  6. win10 html css,纯 HTML/CSS 高仿 Win10 加载动画
  7. Excel表格快捷键技巧使用
  8. matlab和keil下如何查找数组最大值的下标(角标)
  9. 离职时如何拒绝领导的挽留
  10. 怎么复制图片的html代码,修改设置让你轻松复制网页文字或图片