不明语法我点击下面的main()的(这是LPC17xx界面USD代码)用的#define
xdev_in(uart0_getc);
,我得到这个
#define xdev_in(func) xfunc_in = (unsigned char(*)(void))(func)
是什么语法是什么意思?
xfunc_in = (unsigned char(*)(void))(func)
不明语法我点击下面的main()的(这是LPC17xx界面USD代码)用的#define
xdev_in(uart0_getc);
,我得到这个
#define xdev_in(func) xfunc_in = (unsigned char(*)(void))(func)
是什么语法是什么意思?
xfunc_in = (unsigned char(*)(void))(func)
C预处理器会在编译之前检查您的代码并用该定义替换代码;它是一个所谓的函数式宏。
该xdev_in(func)
将扩展到(取代)xfunc_in = (unsigned char(*)(void))(func)
。
请注意,在定义中,func
是一个参数;所以你的代码可能是xdev_in(x)
,它将被替换为xfunc_in = (unsigned char(*)(void))(x)
。
的更多信息:http://en.wikipedia.org/wiki/C_preprocessor#Macro_definition_and_expansion
这个语法怎么样? xfunc_in =(unsigned char(*)(void))(func) –
您没有提供任何上下文来调用该函数。猜测它是将某些东西当作指针。 – Leigh
它看起来像一个函数指针,而不是一个演员,但我对这种事情毫无希望。 –
这所有的一切是因为据我可以告诉发生了什么:
有一个定义:
#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 */
但是它正在与函数指针来完成。
如果您阅读函数指针,您将会理解语法。
如果你不知道什么是类型转换,那么在查看函数指针类型定义和类型转换之前,你需要先理解它。
xfunc_in的数据类型是什么? – Chinna
没有其他信息的情况下,一行内容难以分析。请[编辑]提供更多细节。 (如果你把这一行放在一个源文件中并试图编译它,编译器也不能解析它,它需要更多的上下文。) –
抱歉,不确定 –