gpt4 book ai didi

c - 将指针分配给具有指向其字段的指针的结构

转载 作者:行者123 更新时间:2023-11-30 15:35:24 24 4
gpt4 key购买 nike

struct uart_omap_port *up = (struct uart_omap_port *)port 是什么意思?

与container_of宏类似吗?

最佳答案

struct uart_omap_port *up = (struct uart_omap_port *)port;

这意味着您“端口”指针变量应该被类型转换为“struct uart_omap_port”类型。这在 C 中不是必需的,因为它会隐式进行类型转换(如果您的端口是 void*)。这不是宏,它只是用不同类型的指针(类型转换)的方式。

编辑

来自 Linux/drivers/tty/serial/omap-serial.c 的代码片段

static void serial_omap_enable_ms(struct uart_port *port) {
.....
struct uart_omap_port *up = to_uart_omap_port(port);
}


#define to_uart_omap_port(p) ((container_of((p), struct uart_omap_port, port)))

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

这是您提供的代码。是的,“to_uart_omap_port”是宏它内部使用“container_of”和“offsetof”宏。

这是为了获取类型为“struct uart_omap_port”的指针“up”而编写的来自“struct uart_port”类型的指针“port”。这有点复杂,你需要检查“struct uart_port”和“struct uart_omap_port”是如何声明的。

关于c - 将指针分配给具有指向其字段的指针的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22927061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com