C 解读一个混乱的函数原型

C 解读一个混乱的函数原型,c,C,我有以下功能原型: char *(*scan)(char *, char *, char *, char *, int , int); scanleft()是一个函数,其类型为static char* 当我尝试编译时,我发现scan和scanleft之间存在指针类型不匹配 if ((subtype & 1) ^ zero) scan = scanleft; else scan = scanright; scan()的原型是什么意思?scan不是一个函数;它没有原型 scan是指向函数

我有以下功能原型:

char *(*scan)(char *, char *, char *, char *, int , int);
scanleft()是一个函数,其类型为static char*

当我尝试编译时,我发现scan和scanleft之间存在指针类型不匹配

if ((subtype & 1) ^ zero) scan = scanleft; else scan = scanright;

scan()的原型是什么意思?

scan
不是一个函数;它没有原型

scan
是指向函数的指针(取指向
char
的指针、指向
char
的指针、指向
char
的指针、指向
char
int
的指针)并返回指向
char
的指针

根据您的描述,
scanleet
也不是一个函数;它是指向
char
的指针


你问题中唯一的原型是:

char *, char *, char *, char *, int , int

。。。这对我来说并不特别令人困惑。这是6个简单的参数。

scan
不是一个函数;它没有原型

char *(*scan)(char *, char *, char *, char *, int , int);
scan
是指向函数的指针(取指向
char
的指针、指向
char
的指针、指向
char
的指针、指向
char
int
的指针)并返回指向
char
的指针

根据您的描述,
scanleet
也不是一个函数;它是指向
char
的指针


你问题中唯一的原型是:

char *, char *, char *, char *, int , int
。。。这对我来说并不特别令人困惑。这是6个简单的参数

char *(*scan)(char *, char *, char *, char *, int , int);
这定义了一个函数指针
scan
,它指向一个函数,该函数接受四个
char*
和两个
int
参数,并返回一个
char*

这意味着你可以做以下事情:

char *scanLeft(char *p1, char *p2, char *p3, char *p4, int p5, int p6) {
    // do something
}
char *scanRight(char *p1, char *p2, char *p3, char *p4, int p5, int p6) {
    // do something else
}
:
scan = scanLeft;  char *xyzzy = scan("a", "b", "c", "d", 271828, 314159);
scan = scanRight; char *plugh = scan("a", "b", "c", "d", 271828, 314159);
通过
scan
函数指针的两个调用将转到不同的函数

这定义了一个函数指针
scan
,它指向一个函数,该函数接受四个
char*
和两个
int
参数,并返回一个
char*

这意味着你可以做以下事情:

char *scanLeft(char *p1, char *p2, char *p3, char *p4, int p5, int p6) {
    // do something
}
char *scanRight(char *p1, char *p2, char *p3, char *p4, int p5, int p6) {
    // do something else
}
:
scan = scanLeft;  char *xyzzy = scan("a", "b", "c", "d", 271828, 314159);
scan = scanRight; char *plugh = scan("a", "b", "c", "d", 271828, 314159);

通过
scan
函数指针进行的两个调用将指向不同的函数。

该“函数原型”看起来像一个函数指针。您所说的“scanlefit()是一个函数,具有静态字符*”类型是什么意思?关键字
static
不是类型的一部分,
char*
不是函数类型。不相关,什么是
?如果它是一个数值为
0
的数值常量,为什么不直接使用它呢?如果是别的东西,为什么要叫它
zero
?来充实一下上面的评论:cdecl程序(或网站)是你的朋友——它将C声明转换为英语,反之亦然。在上述扫描声明的情况下,它产生:“将扫描声明为指向函数的指针(指向char的指针,指向char的指针,指向char的指针,指向char的指针,int,int)返回指向char的指针”如何声明
scanleet
?我们对模糊的口头描述不感兴趣。发布
scanleft
的完整声明。该“函数原型”看起来像一个函数指针。您所说的“scanleft()是一个函数并且具有静态字符*”类型是什么意思?关键字
static
不是类型的一部分,
char*
不是函数类型。不相关,什么是
?如果它是一个数值为
0
的数值常量,为什么不直接使用它呢?如果是别的东西,为什么要叫它
zero
?来充实一下上面的评论:cdecl程序(或网站)是你的朋友——它将C声明转换为英语,反之亦然。在上述扫描声明的情况下,它产生:“将扫描声明为指向函数的指针(指向char的指针,指向char的指针,指向char的指针,指向char的指针,int,int)返回指向char的指针”如何声明
scanleet
?我们对模糊的口头描述不感兴趣。张贴
scanleet
的准确完整声明。