功能原型的重点是什么?

Mau*_*rus 5 c function-prototypes

我正在按照指南学习curses,以及之前原型函数中的所有C代码main(),然后定义它们.在我的C++学习中,我听说过函数原型,但从未完成它,据我所知,它对代码的编译方式没有太大区别.这是程序员的个人选择吗?如果是这样,为什么它包含在C中呢?

Jer*_*man 12

函数原型设计最初没有包含在C中.当你调用一个函数时,编译器只是接受了它的存在,并且它采用了你提供的参数类型.如果您的参数顺序,数字或类型错误,那么太糟糕了 - 您的代码在运行时可能会以神秘的方式失败.

后来的C版本增加了功能原型,以解决这些问题.在某些情况下,您的参数会隐式转换为声明的类型,或者标记为与原型不兼容,编译器可能会将错误的顺序和类型数标记为错误.这具有启用varargs函数和它们所需的特殊参数处理的副作用.

需要注意的是,在C(而不像在C++中),声明的函数foo_t func()一样的声明为函数foo_t func(void).后者的原型是没有参数.前者声明了一个没有原型的函数.


Jim*_*Jim 3

在 C 中,需要原型设计,这样你的程序就知道你有一个x()在你还没有定义它时被调用的函数,这样y()就知道存在一个x(). C 进行自上而下的编译,因此需要事先定义它,这是简短的答案。

x();
y();
main(){

}

y(){
x();
}

x(){
...
more code ...
maybe even y();
}
Run Code Online (Sandbox Code Playgroud)