任何人都可以建议我下面的代码行代表什么?
static int(*pfcn[2]) (char *, ...) = { (void *)printf, (void *)NULL };
答案 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};
点表示该函数将在第一个参数之后接受零个或多个参数。