gpt4 book ai didi

c - #define 的未知语法

转载 作者:行者123 更新时间:2023-11-30 20:52:08 25 4
gpt4 key购买 nike

我在 main() 中单击了以下内容(这是来自 LPC17xx 接口(interface)美元代码)

xdev_in(uart0_getc);

我得到了这个

#define xdev_in(func) xfunc_in = (unsigned char(*)(void))(func)

这个语法是什么意思?

xfunc_in = (unsigned char(*)(void))(func)

最佳答案

据我所知,总而言之,这是正在发生的事情:

有一个定义:

#define xdev_in(func) xfunc_in = (unsigned char(*)(void))(func)

声明:

xdev_in(uart0_getc);

与键入相同:

xfunc_in = (unsigned char (*)(void))(uart0_getc);

这很可能意味着以下内容:

有一个通用函数指针xfunc_in,以某种形式用在xdev_in(uart0_getc)语句下面的代码中。这被“指向”以下形式的函数:

 unsigned char uart0_getc(void);

现在 uart0_getc 实际上可能没有像上面那样声明,它可能是一个不同的函数,一个函数指针或一个 void * 或其他什么;但在开始之前,让我们先解释一下代码片段 unsigned char (*)(void)

它是一个函数指针类型(没有分配变量或类型名称),指向 unsigned char foo(void); 形式的函数;然而,该片段中没有变量名称;这就像我说输入没有变量名的 char 一样。

现在来看外面的 ():然后将整个代码片段放在括号 () 内,以创建到该函数指针类型的类型转换。

然后应用于 uart0_getc 将 uart0_getc 值类型转换为该函数指针类型。

这与采用一种简单类型并将其转换为另一种简单类型的概念相同:

 int c = (int)'A'; /* type cast character A to an int */

但是它是通过函数指针完成的。

如果您阅读了函数指针,您就会理解其语法。

如果您不知道什么是类型转换,那么在查看函数指针类型定义和类型转换之前,您需要首先了解这一点。

关于c - #define 的未知语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17376781/

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