函数样式宏(Function-like macro)是一种类似于函数的宏定义,在使用时可以像函数一样进行调用。函数样式宏的语法和形式如下: #define 宏名(参数列表) 替换列表 其中,宏名是宏的名称,参数列表是宏定义中的参数列表,用逗号分隔,替换列表是宏定义中的替换列表。使用函数样式宏时,需要提供参数列表中的实参,替换列表中...
1.用do{}while(0)把宏包起来 #define init_hashtable_nodes(p, b) do { \int _i; \hash_init((p)->htable##b); \...略去 \} while (0) Linux中常见如上定义宏的形式,我们都知道do{}while(0)只执行一次,那么这个有什么意义呢?我们写一个更简单的宏,来看看 #define fun(x) fun1(x);fun...
7.__stringify 宏:这个宏用于将宏参数转换为字符串。它通过两个宏的嵌套定义实现。这在内核中用于调试和日志记录等目的。8.BUILD_BUG_ON_ZERO 宏:这个宏用于在编译时检测某个条件是否为假。如果条件为真,将导致负宽度的位域,从而触发编译错误。这个宏在内核中用于进行静态断言。这些案例代码展示了宏定义在Lin...
函数样式宏(Function-like macro)是一种类似于函数的宏定义,在使用时可以像函数一样进行调用。函数样式宏的语法和形式如下: #define宏名(参数列表) 替换列表 其中,宏名是宏的名称,参数列表是宏定义中的参数列表,用逗号分隔,替换列表是宏定义中的替换列表。使用函数样式宏时,需要提供参数列表中的实参,替换列表中的...
51CTO博客已为您找到关于c语言linux系统宏的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及c语言linux系统宏问答内容。更多c语言linux系统宏相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。
02Linux内核中C语言宏的常见用法 2.1常量定义宏 1 使用#define定义常量 在C语言中,可以使用预处理器指令 #define 来定义常量。定义常量的语法如下: #define常量名 常量值 其中,常量名是定义的常量的名称,常量值是常量的值。 下面是一些常用例子: // 定义一个整数常量:#defineMAX_NUM 100// 定义一个字符串常量...
Linux内核可谓是集C语言大成者,从中我们可以学到非常多的技巧,本文来学习一下宏技巧,文章有点长,但耐心看完后C语言level直接飙升。 1.用do{}while(0)把宏包起来 #defineinit_hashtable_nodes(p, b) do {int_i; hash_init((p)- >htable##b);...略去 ...
container_of宏的定义 在<linux/kernel.h>头文件中,container_of宏的定义如下:#define container_of(ptr, type, member) \((type *)((char *)(ptr) - offsetof(type, member)))其中,ptr是指向结构体中的某个成员的指针,type是结构体的类型,member是结构体中的成员名。offsetof宏用于计算结构体中某个...
Linux内核中的一些宏定义(前面list_head文章中讲过的就不说了,比如container_of之类的): 常用的宏: __init,标记内核启动时所用的初始化代码,内核启动完成后就不再使用。其所修饰的内容被放到.init.text section中: #define __init __section(.init.text) __cold notrace ...
1、无参型简单的宏定义,使用中最常见: #define <宏名> <字符串> 如上是最常用也是最简单的一种宏使用的形式,在程序中就是一种简单的替换,如: #define MAX 100 char ch[MAX];//在程序运行时,MAX实际上被100所替换。 2、带参数宏,linux内核中非常常见: #define <宏名>(<参数表>)<宏体> ...