C 带有define的未知语法
我主要点击了以下内容,这是来自LPC17xx接口的uSD代码C 带有define的未知语法,c,C,我主要点击了以下内容,这是来自LPC17xx接口的uSD代码 xdev_in(uart0_getc); 我得到了这个 #define xdev_in(func) xfunc_in = (unsigned char(*)(void))(func) 这个语法是什么意思 xfunc_in = (unsigned char(*)(void))(func) C预处理器将检查您的代码,并在编译之前用该定义替换代码;这就是所谓的函数式宏 xdev_infunc将被扩展为替换为xfunc_in=unsig
xdev_in(uart0_getc);
我得到了这个
#define xdev_in(func) xfunc_in = (unsigned char(*)(void))(func)
这个语法是什么意思
xfunc_in = (unsigned char(*)(void))(func)
C预处理器将检查您的代码,并在编译之前用该定义替换代码;这就是所谓的函数式宏 xdev_infunc将被扩展为替换为xfunc_in=unsigned char*voidfunc 注意,在定义中,func是一个参数;因此,您的代码可以是xdev_inx,并将替换为xfunc_in=unsigned char*voidx
更多信息:总而言之,据我所知,这就是正在发生的事情: 有一个定义:
#define xdev_in(func) xfunc_in = (unsigned char(*)(void))(func)
声明:
xdev_in(uart0_getc);
与键入相同:
xfunc_in = (unsigned char (*)(void))(uart0_getc);
这很可能意味着:
中有一个通用函数指针xfunc_,它以某种形式在xdev_inuart0_getc语句下面的代码中使用。“指向”形式的函数:
unsigned char uart0_getc(void);
现在uart0_getc实际上可能不会像上面那样被声明,它可能是一个不同的函数,一个函数指针或一个void*或其他什么;但在开始之前,让我们先解释一下unsigned char*void片段
它是一种函数指针类型,未指定变量或类型名,该变量或类型名将指向形式为unsigned char foovid的函数;但是,该代码段中没有变量名;这和我说的没有变量名的类型char是一样的
现在看一下外部:然后将整个代码段放在括号内,以创建该函数指针类型的类型转换
然后应用于uart0_getc,将uart0_getc值类型转换为该函数指针类型
这与例如将一个简单类型转换为另一个简单类型的概念相同:
int c = (int)'A'; /* type cast character A to an int */
然而,它是用函数指针完成的
如果你仔细阅读函数指针,你就会理解语法
如果您不知道类型转换是什么,那么在查看函数指针类型定义和类型转换之前,您需要首先了解这一点。中xfunc_的数据类型是什么?上下文中的一行没有其他信息,很难解析。请提供更多详细信息。如果将这一行按原样放在源文件中并尝试编译它,编译器也无法解析它。它需要更多的上下文。上面的代码应该会给你编译错误。请检查此语法是否正确?xfunc_in=unsigned char*voidfunc您没有为调用的位置提供任何上下文。我猜它是在将某个东西强制转换为指针。它看起来像一个函数指针,而不是强制转换,但我对这种事情没有希望。至少请清楚地解释一下unsigned char*voidfunc是什么意思?