我在使用C的嵌入式硬件中遇到过这种情况。
#define EnterPWDN(clkcon) ( (void (*)(int))0xc0080e0 ) (clkcon)
我不知道这个函数宏是如何工作的。我理解clkcon
是EnterPWDN的函数参数,但之后会发生什么?
答案 0 :(得分:8)
它将地址0xc0080e0
强制转换为指向函数的指针,该函数接受int
并返回void
,并调用该函数,并将clkcon
作为参数传递。
拼写出来:
typedef void (func_ptr*)(int);
func_ptr func = (func_ptr)0xc0080e0;
func(clkcon);
(如果您没有遇到函数指针,可能需要grab a good C introduction并阅读相关主题。)
答案 1 :(得分:5)
它是一个void函数指针,它将int作为参数。该功能保存在特定的存储器地址0xc0080e0。
(void (*)(int))
以上是函数指针声明。首先是void返回类型。接下来是它的一个指针,最后是int告诉你函数的参数是什么。内存地址是函数存储的位置,整个过程将内存地址转换为正确的函数指针类型,然后调用函数并将“clkcon”传递给它。
答案 2 :(得分:3)