c语言 - "void fatal(char *); "是什么意思?



我刚开始学习 C,我在给出的一个例子中遇到了这个,我知道这是一个函数原型,但我还没有想到的概念是

void function(char *);

意思是当我最终声明函数时,它将采用这样的参数 char 指针参数

void function(char *arg){}

只是为了回答你给出的问题:

"void fatal(char *);"是什么意思?

这是函数fatal的原型/声明。fatal是一个函数,它将指向char的指针作为唯一的参数。

void是函数的返回类型,在这种情况下,这意味着函数不会向其调用方返回值,或者如果返回值,则返回的值被调用方解释为无效。


函数fatal()的原型/声明对于编译器很重要。这样,编译器将主要获得"已知",该函数稍后将如何在以下程序中使用,但次要也会检查定义,声明和函数的使用之间是否存在任何不一致。


在 C 语言中,可以在函数声明中省略指向char的指针的特定标识符,但不能在定义中省略。在这种情况下,C 与C++不同;C++在定义中也允许省略标识符。您可以在此答案中查看标准中相应的短语。

因此,在 C 中定义fatal时,您必须为char指针提供标识符:

// Definition of function fatal().
void fatal(char *a)
{
printf("The string of (a) is: %sn",a);      
}

但是您可以在声明中省略这一点:

void fatal(char *);

注意:调用函数时提供的参数与函数声明中指定的参数之间的标识符可能会有所不同,例如:

// Declaration (Protoype) of function fatal().
void fatal(char* a);   // parameter a (pointer to char);
int main()
{
char b[] = "Hello";        // Declaration and Initialization of array b.
printf("Let´s use the function fatal to print what the string in b is   
contained of!n");
fatal(b);                  // when given as argument to a function, b 
// is a pointer to the first element of the char 
// array of b.
}
// Definition of function fatal().
void fatal(char* a)
{
printf("The string of (a) is: %sn",a);      
}

在此处查看有关参数和参数之间区别的更多信息:参数和参数之间有什么区别?


在更远的角度来看,"按值传递"和"按引用传递"之间也存在重要区别。指针参数/参数始终是按引用传递的。这两者特别是什么以及它们如何区别在这里得到了最好的解释:按引用传递与按值传递有什么区别?

在此上下文和范围可见性的上下文中,了解您是否具有引用函数fatal中的对象的标识符x也很重要,可以在调用者中使用相同的x标识符,反之亦然,以引用每个作用域中完全不同的对象。 - 手段, 对于不同作用域中的不同对象,可以使用相同的标识符(名称),但每个标识符只能在其作用域中使用一次。

这里void function(char *);是一个函数原型,它只是一个函数的声明,它指定了函数的名称、参数和返回类型。它不包含函数体。

它向编译器提供该函数稍后可以在程序中使用的信息。

如果在 main() 函数之前定义了用户定义的函数,则不需要它。

[...]的意思是当我最终声明函数时,它将采用参数char指针参数[...] ?

是的,确实如此。

函数声明的重要一点是参数的类型。声明中不需要参数的名称

void function(char *);

但仅在函数的定义范围内

void function(char *arg)
{
}

.

它只是通知编译器函数采用什么类型参数以及它的返回类型是什么。

int main()
{
double x = foo(1,2);
}
void foo(double x)
{
printf("%f", x);
}

在这个编译器不知道函数的参数是什么foo以及如何正确传递它们。返回类型也未知。编译器将假定它们是int的 - 在这种情况下这不是事实

https://godbolt.org/z/J8juc4

最新更新