Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 带有define的未知语法_C - Fatal编程技术网

C 带有define的未知语法

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

我主要点击了以下内容,这是来自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=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是什么意思?