c語(yǔ)言中container_of, typeof, offtof這些是哪個(gè)標(biāo)準(zhǔn)的?
1. container_of是Linux內(nèi)核中實(shí)現(xiàn)的宏,不是C語(yǔ)言的標(biāo)準(zhǔn)函數(shù)。不能跨平臺(tái)。
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offtof(type,member) );})
2. typeof是GNU C的擴(kuò)展,不是ISO標(biāo)準(zhǔn)中的函數(shù)。用gcc編譯可以跨平臺(tái)。
3. offtof是C語(yǔ)言標(biāo)準(zhǔn)庫(kù)中的宏,定義在頭文件stddef.h中。可以跨平臺(tái)。
C語(yǔ)言程序container_of問(wèn)題
container_of是內(nèi)核的一個(gè)宏。
你現(xiàn)在的錯(cuò)誤是未定義這個(gè)宏導(dǎo)致的
可以自己手動(dòng)添加這個(gè)宏
#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
編寫程序,建立一個(gè)帶有節(jié)點(diǎn)的單向鏈表,輸入字符串,并按從小到大順序組織到鏈表中
int main()
{
Link head; //鏈表(不帶頭節(jié)點(diǎn))
int n;
printf("輸入鏈表的長(zhǎng)度n: ");
scanf("%d",&n);
printf("連續(xù)輸入%d個(gè)數(shù)據(jù)(以空格隔開): ",n);
head=CreateLink(n);
printf("\n原本鏈表的節(jié)點(diǎn)是: ");
DispLink(head);
LinkSort(head);
printf("\n從大到小排序之后: ");
DispLink(head);
printf("\n");
return 0;
}
鏈表的具體存儲(chǔ)表示為:
① 用一組任意的存儲(chǔ)單元來(lái)存放線性表的結(jié)點(diǎn)(這組存儲(chǔ)單元既可以是連續(xù)的,也可以是不連續(xù)的)
② 鏈表中結(jié)點(diǎn)的邏輯次序和物理次序不一定相同。為了能正確表示結(jié)點(diǎn)間的邏輯關(guān)系,在存儲(chǔ)每個(gè)結(jié)點(diǎn)值的同時(shí),還必須存儲(chǔ)指示其后繼結(jié)點(diǎn)的地址(或位置)信息(稱為指針(pointer)或鏈(link))
鏈?zhǔn)酱鎯?chǔ)是最常用的存儲(chǔ)方式之一,它不僅可用來(lái)表示線性表,而且可用來(lái)表示各種非線性的數(shù)據(jù)結(jié)構(gòu)。
以上內(nèi)容參考:百度百科-單鏈表
一箱貨 用英語(yǔ)怎么說(shuō)
C語(yǔ)言宏定義里,用小括號(hào)中加花括號(hào)括起來(lái)的代碼塊,這種形式的宏定義理解不了
本文發(fā)布于:2023-02-28 19:16:00,感謝您對(duì)本站的認(rèn)可!
本文鏈接:http://m.newhan.cn/zhishi/a/167760625457660.html
版權(quán)聲明:本站內(nèi)容均來(lái)自互聯(lián)網(wǎng),僅供演示用,請(qǐng)勿用于商業(yè)和其他非法用途。如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除。
本文word下載地址:container.doc
本文 PDF 下載地址:container.pdf
| 留言與評(píng)論(共有 0 條評(píng)論) |