C - 这条线是什么意思?

psi*_*lia 11 c embedded coding-style

我试图了解以下最糟糕的C代码(来自uboot项目)的含义:

rc = ((ulong (*)(bd_t *, int, char *[]))addr) (bd, --argc, &argv[1]);
Run Code Online (Sandbox Code Playgroud)

它是什么?一个函数调用?它更具可读性吗?

在此先感谢您的帮助!

unw*_*ind 34

是的,这是一个函数调用.

它将值转换addr为函数指针,该函数指针接受(bd_t *, int, char *[])作为参数并返回a ulong,并调用该函数.可以加入到:

typedef ulong (*bd_function)(bd_t *bd, int argc, char *argv[]);

bd_function bdfunc = (bd_function) addr;

rc = bdfunc(bd, --argc, &argv[1]);
Run Code Online (Sandbox Code Playgroud)

这可能是过度的,介绍一个typedef如果只发生一次,但我觉得能够分别查看函数指针的类型有很大帮助.

  • 由于typedef使得东西可读,所以它并不过分. (7认同)

Mik*_*ler 12

它转换addr为一个函数指针,它接受(bd_t *, int, char *[])作为参数并返回一个long,然后用参数调用它(bd, --argc, &argv[1]).

  • @Jason:当然可以(而且应该)看到放松的答案. (3认同)
  • 耸肩.对于C程序员来说,它是完全可读的. (3认同)