任何人都可以建議我代碼的下列代表什麼?如何理解這種函數聲明?
static int(*pfcn[2]) (char *, ...) = { (void *)printf, (void *)NULL };
任何人都可以建議我代碼的下列代表什麼?如何理解這種函數聲明?
static int(*pfcn[2]) (char *, ...) = { (void *)printf, (void *)NULL };
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
檢測結束。避免投射是一件好事。
pfcn
是一個函數指針數組。
這些函數是那些在返回int
時需要可變數量的參數。
這是一個(難以閱讀)定義兩個函數的數組。我會寫這樣的:
#include <stdio.h>
#include <stdlib.h>
typedef int (*Function)(const char *format, ...);
static Function pfcn[2] = {printf, NULL};
點意味着函數將接受零個或多個參數後第一個。
@milevyo - 爲什麼這麼說? – artm
初始化器應該是一個常量;這不是一個常量初始值設定項。 – milevyo
對不起,我沒有正確閱讀。 :) – milevyo