91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

container_of宏在嵌入式系統中的使用

小樊
83
2024-09-02 19:38:59
欄目: 編程語言

container_of 宏是一個常用于 Linux 內核和其他 C 語言編寫的嵌入式系統中的實用宏

container_of 宏的主要作用是從一個成員變量的指針,反向獲取到包含該成員變量的結構體的指針。這在處理回調函數、鏈表操作等場景時非常有用。

以下是 container_of 宏的基本用法:

#define container_of(ptr, type, member) ({ \
    const typeof(((type *)0)->member) *__mptr = (ptr); \
    (type *)((char *)__mptr - offsetof(type, member)); })

這里有一個簡單的例子來說明如何在嵌入式系統中使用 container_of 宏:

#include<stdio.h>
#include <stddef.h>

typedef struct {
    int id;
    char name[20];
} student_t;

int main() {
    student_t student1 = {1, "Alice"};
    student_t student2 = {2, "Bob"};

    // 獲取 student1 的 name 成員的指針
    char *name_ptr = &student1.name;

    // 使用 container_of 宏獲取包含 name 成員的 student_t 結構體的指針
    student_t *student_ptr = container_of(name_ptr, student_t, name);

    // 輸出結果
    printf("Student ID: %d\n", student_ptr->id);
    printf("Student Name: %s\n", student_ptr->name);

    return 0;
}

在這個例子中,我們首先定義了一個 student_t 結構體,然后創建了兩個學生對象 student1student2。接著,我們獲取了 student1name 成員的指針,并使用 container_of 宏獲取了包含該成員的 student_t 結構體的指針。最后,我們輸出了學生的 ID 和名字。

需要注意的是,container_of 宏依賴于 C 語言的特性(如 typeof 運算符和復合語句表達式),因此在使用時需要確保編譯器支持這些特性。

0
黑山县| 邹城市| 同仁县| 顺昌县| 盖州市| 盐源县| 蒙阴县| 霍城县| 广饶县| 德江县| 齐齐哈尔市| 永修县| 通渭县| 河曲县| 赣州市| 新郑市| 新安县| 电白县| 阆中市| 黎平县| 祥云县| 九龙坡区| 永顺县| 芮城县| 昭平县| 龙陵县| 赫章县| 石城县| 喀喇沁旗| 日照市| 林甸县| 温州市| 韩城市| 砀山县| 南投县| 新郑市| 安达市| 开江县| 苏尼特左旗| 芜湖县| 兴隆县|