当前位置:  开发笔记 > 编程语言 > 正文

如何理解这种功能声明?

如何解决《如何理解这种功能声明?》经验,为你挑选了1个好方法。

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

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

chux - Reins.. 5

Cgibberish↔英语是一个很好的网站,有助于解释声明

// 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 };

国际海事组织,也应该是宣言

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

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

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

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

...而且要反对 printf_null而不是NULL检测结束.避免演员阵容是一件好事.



1> chux - Reins..:

Cgibberish↔英语是一个很好的网站,有助于解释声明

// 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 };

国际海事组织,也应该是宣言

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

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

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

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

...而且要反对 printf_null而不是NULL检测结束.避免演员阵容是一件好事.


顺便说一句,你可以在空指针和函数指针之间进行转换,这是明确定义的行为.但是,在标准C中,您无法在函数指针和常规指针之间进行转换(例如问题中的`void*`).
推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有