• <em id="6vhwh"><rt id="6vhwh"></rt></em>

    <style id="6vhwh"></style>

    <style id="6vhwh"></style>
    1. <style id="6vhwh"></style>
        <sub id="6vhwh"><p id="6vhwh"></p></sub>
        <p id="6vhwh"></p>
          1. 国产亚洲欧洲av综合一区二区三区 ,色爱综合另类图片av,亚洲av免费成人在线,久久热在线视频精品视频,成在人线av无码免费,国产精品一区二区久久毛片,亚洲精品成人片在线观看精品字幕 ,久久亚洲精品成人av秋霞

            container

            更新時(shí)間:2023-03-01 01:44:14 閱讀: 評(píng)論:0

            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

            但由于是在驅(qū)動(dòng)中實(shí)現(xiàn)的這個(gè)宏,有沒有辦法在用戶空間測(cè)試呢?
            有的。我們可以將linux/kernel.h頭文件包含進(jìn)來(lái),直接在用戶空間測(cè)試這個(gè)宏的巧妙之處。
            下面就是我的測(cè)試代碼。
            main.c文件

            #include
            #include
            #include
            #include

            struct cona_t{
            int i;
            int j;
            int v;
            char t[10];
            unsigned short xy;
            };

            struct cona_t ct;
            unsigned short xy;
            int main(int argc,char * argv[])
            {
            int xy;
            struct cona_t * p;
            memt(&ct,0,sizeof(struct cona_t));
            ct.i = ct.j = ct.v = 10;
            sprintf(ct.t,"%s","sdf");
            ct.xy = 20;
            p = container_of(&ct.xy,struct cona_t,xy);

            printf("%s\n",p->t);
            return 0;
            }

            下面是Makefile文件
            CC=gcc
            TAR=main
            SRC=main.c
            KERNEL_INCLUDE ?= /lib/modules/$(shell uname -r)/build/include
            all:
            $(CC) -D__KERNEL__ -o $(TAR) -I$(KERNEL_INCLUDE) $(SRC)

            clean:
            rm -f $(TAR)

            如果打開kernel.h文件,就會(huì)發(fā)現(xiàn)這個(gè)container_of這個(gè)宏定義如下:
            #define container_of(ptr, type, member) ({ \
            const typeof( ((type *)0)->member ) *__mptr = (ptr); \
            (type *)( (char *)__mptr - offtof(type,member) );})

            offtof又被如下定義:
            #ifdef __KERNEL__
            #undef offtof
            #ifdef __compiler_offtof
            #define offtof(TYPE,MEMBER) __compiler_offtof(TYPE,MEMBER)
            #el
            #define offtof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
            #endif

            那個(gè)__compiler_offtof原型是__builtin_offtof這個(gè)是GCC編譯器所特有的。

            編寫程序,建立一個(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ō)

            要看你是什么箱子了
            木箱是wooden ca
            硬紙版箱是carton(這個(gè)很常用)
            鐵皮箱子是iro heetca
            集裝箱是container或shipping container
            通常前兩者用的比較多,特別是carton.泛指的話ca也行,最好不同箱子用相對(duì)應(yīng)的單詞.

            C語(yǔ)言宏定義里,用小括號(hào)中加花括號(hào)括起來(lái)的代碼塊,這種形式的宏定義理解不了

            宏定義就是無(wú)條件替換啊,當(dāng)出現(xiàn)container_of(ptr, type, member)這種形式的語(yǔ)句時(shí)候,就無(wú)條件替換為
            ({\
            const typeof( ((type *)0)->member ) *__mptr = (ptr);\
            (type *)( (char *)__mptr - offtof(type,member) );})
            就跟普通的兩條程序一樣,沒有什么特別難于理解的啊,
            宏定義的存在本來(lái)就是為了簡(jiǎn)化書寫的。
            你看到的是container_of(ptr, type, member),
            但是編譯器遇到這個(gè)就會(huì)直接無(wú)條件轉(zhuǎn)化了成下邊那長(zhǎng)的兩句了。

            本文發(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

            標(biāo)簽:container
            留言與評(píng)論(共有 0 條評(píng)論)
               
            驗(yàn)證碼:
            Copyright ?2019-2022 Comsenz Inc.Powered by ? 實(shí)用文體寫作網(wǎng)旗下知識(shí)大全大全欄目是一個(gè)全百科類寶庫(kù)! 優(yōu)秀范文|法律文書|專利查詢|
            主站蜘蛛池模板: 久久人人97超碰国产精品| 91精品国产综合久久精品| 国产成人黄色自拍小视频| 精品乱码一区二区三四五区| 97精品依人久久久大香线蕉97| 亚洲熟女国产熟女二区三区| 国产午夜在线观看视频| 国产福利微视频一区二区| 国产一区二区日韩经典| 丰满人妻被两个按摩师| 午夜福利国产区在线观看| 香港特级三A毛片免费观看| 亚洲av专区一区| 白嫩少妇激情无码| 成人精品一区二区三区不卡免费看| 日韩亚洲精品中文字幕| 医院人妻闷声隔着帘子被中出| 神马久久亚洲一区 二区| 亚洲有无码中文网| 亚洲欧美人成人综合在线播放| 麻花传剧mv在线看免费| 久久亚洲精精品中文字幕| 国产欧美日韩亚洲一区二区三区 | 亚洲综合精品香蕉久久网| 欧美亚洲h在线一区二区| 少妇av一区二区三区无码| 在线免费不卡视频| 成年女人免费毛片视频永久| 色噜噜噜亚洲男人的天堂| 最近的中文字幕免费完整版| 国产999精品2卡3卡4卡| 亚洲av网站首页在线观看| 亚洲综合一区二区三区视频| 99久久婷婷国产综合精品青草漫画 | 日韩人妻无码一区二区三区综合部| 日韩精品一区二区三区四| 最新亚洲人成网站在线观看| 四虎女优在线视频免费看| 精品国产午夜福利在线观看| 国产精品美女一区二区三| 国产萌白酱喷水视频在线观看 |