如何理解这种功能声明?

时间:2015-12-07 15:40:23

标签: c function

任何人都可以建议我下面的代码行代表什么?

static int(*pfcn[2]) (char *, ...) = { (void *)printf, (void *)NULL };

3 个答案:

答案 0 :(得分:5)

C gibberish ↔ English是一个很好的网站,可以帮助解释声明

// declare pfcn as array 2 of pointer to function (pointer to char, ...) returning int
int(*pfcn[2]) (char *, ...)

{ (void *)printf, (void *)NULL };使用函数printf()NULL初始化此数组,可能表示结束。

int printf(const char *format, ...)
NULL

static表示该数组是本地的,只能访问它所在的函数/ C文件。

@Lundin建议编译良好。

 // { printf, (void *) NULL };
 { printf, NULL };

IMO,声明也应该是

//                    const added
static int(*pfcn[2]) (const char *, ...) = { printf, NULL };

注意:某些C可能不允许将NULL转换为函数指针。在这种情况下,代码可以使用

static int printf_null(const char *format, ...) {
  return 0;
}

static int(*pfcn[2]) (const char *, ...) = { printf, printf_null };

...并针对printf_null而不是NULL进行测试以检测结束。避免演员阵容是一件好事。

答案 1 :(得分:4)

pfcn是一个函数指针数组。

这些函数是在返回int时采用可变数量的args的函数。

答案 2 :(得分:1)

这是两个函数数组的(难以阅读)定义。我会写这样的东西:

#include <stdio.h>
#include <stdlib.h>

typedef int (*Function)(const char *format, ...);

static Function pfcn[2] = {printf, NULL};

点表示该函数将在第一个参数之后接受零个或多个参数。