c语言中container_of, typeof, offtof这些是哪个标准的?
1. container_of是Linux内核中实现的宏,不是C语言的标准函数。不能跨平台。
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offtof(type,member) );})
2. typeof是GNU C的扩展,不是ISO标准中的函数。用gcc编译可以跨平台。
3. offtof是C语言标准库中的宏,定义在头文件stddef.h中。可以跨平台。
C语言程序container_of问题
container_of是内核的一个宏。
你现在的错误是未定义这个宏导致的
可以自己手动添加这个宏
#include<stdio.h>
#include<stddef.h>
#include<stdlib.h>
typedefstruct
{
intnum;
chara;
}node;
#definecontainer_of(ptr,type,member)({\
consttypeof(((type*)0)->member)*__mptr=(ptr);\
(type*)((char*)__mptr-offtof(type,member));})
#definecontainer_of2(ptr,type,member)({\
(type*)((char*)ptr-offtof(type,member));})
voidmain()
{
node*p=(node*)malloc(sizeof(node));
p->num=1;
p->a='a';
printf("offtof:%lu\n",offtof(node,num));
printf("addr:%lu\n",p);
printf("containerof:%lu\n",container_of(&(p->a),node,a));
}
如何在用户空间使用container
编写程序,建立一个带有节点的单向链表,输入字符串,并按从小到大顺序组织到链表中
int main()
{
Link head; //链表(不带头节点)
int n;
printf("输入链表的长度n: ");
scanf("%d",&n);
printf("连续输入%d个数据(以空格隔开): ",n);
head=CreateLink(n);
printf("\n原本链表的节点是: ");
DispLink(head);
LinkSort(head);
printf("\n从大到小排序之后: ");
DispLink(head);
printf("\n");
return 0;
}
链表的具体存储表示为:
① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)
② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))
链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。
以上内容参考:百度百科-单链表
一箱货 用英语怎么说
C语言宏定义里,用小括号中加花括号括起来的代码块,这种形式的宏定义理解不了
本文发布于:2023-02-28 19:16:00,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/167760625457660.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:container.doc
本文 PDF 下载地址:container.pdf
留言与评论(共有 0 条评论) |