C 是否使用原型+;定义而不仅仅是定义加速程序?
我对C编程非常陌生,但对Python、Java和Perl的经验有限。我只是想知道在main()上面有一个函数的原型,在main()下面有这个函数的定义,而不是在main()上面有这个函数的定义,有什么好处。根据我所读到的,这个定义也可以作为一个原型 提前感谢,C 是否使用原型+;定义而不仅仅是定义加速程序?,c,function,prototype,C,Function,Prototype,我对C编程非常陌生,但对Python、Java和Perl的经验有限。我只是想知道在main()上面有一个函数的原型,在main()下面有这个函数的定义,而不是在main()上面有这个函数的定义,有什么好处。根据我所读到的,这个定义也可以作为一个原型 提前感谢, 当其他人想要使用你的库时,你可以给他们标题(包含原型),而不给他们你的代码 例子?Windows SDK 如果两个函数相互调用,则至少需要其中一个函数的原型 对编译后的代码没有性能影响* *注:嗯,我想可能有。如果编译器决定将该方法放在
- 当其他人想要使用你的库时,你可以给他们标题(包含原型),而不给他们你的代码 例子?Windows SDK
- 如果两个函数相互调用,则至少需要其中一个函数的原型
- 当其他人想要使用你的库时,你可以给他们标题(包含原型),而不给他们你的代码 例子?Windows SDK
- 如果两个函数相互调用,则至少需要其中一个函数的原型
*注:嗯,我想可能有。如果编译器决定将该方法放在二进制文件中的其他位置,那么理论上可以看到影响应用程序性能的局部性问题。不过,这通常不需要担心。在
main()上使用原型(在单个模块中)主要是个人偏好的问题。有些人喜欢在文件底部看到main()
;其他人喜欢在顶部看到它。我有一位大学教授抱怨说,我写程序时“颠倒”,因为我把main()
放在了底部(避免了为所有东西编写和维护原型)
有一种情况可能需要原型:
void b(); // prototype required here
void a()
{
b();
}
void b()
{
a();
}
在这种相互递归的情况下,至少需要一个原型出现在另一个函数的定义之前。在main()
(单个模块内)上面使用原型主要是个人偏好的问题。有些人喜欢在文件底部看到main()
;其他人喜欢在顶部看到它。我有一位大学教授抱怨说,我写程序时“颠倒”,因为我把main()
放在了底部(避免了为所有东西编写和维护原型)
有一种情况可能需要原型:
void b(); // prototype required here
void a()
{
b();
}
void b()
{
a();
}
在这种相互递归的情况下,您至少需要一个原型出现在另一个函数的定义之前。如果您按照正确的顺序编写代码,即main last,那么每个函数的代码中只有一个定义。这避免了在需要更改时必须在两个或更多位置更改代码。这样可以防止错误并减少维护错误的工作量。如果您按照正确的顺序编写代码,即main last,则该原则称为“”,那么代码中每个函数只有一个定义。这避免了在需要更改时必须在两个或更多位置更改代码。这样可以防止错误并减少维护错误的工作量。该原理称为“将函数拆分为独立的原型和定义没有任何好处。事实上,这种方法有一个明显的缺点,因为它需要额外的维护工作来保持原型和定义的完美同步。出于这个原因,一个合理的方法是仅在必要时提供一个单独的原型。例如,对于在头文件中声明的外部函数,您别无选择,只能将原型和定义分开
对于单个翻译单元内部的函数(我们通常声明为静态的),绝对没有理由创建一个独立的原型,因为函数本身的定义包括一个原型。只需按自然顺序定义函数:首先是低级函数,最后是高级函数,就这样。如果您的程序由单个翻译单元组成,则main
函数将位于最底部
在这种方法中,唯一需要声明独立原型的情况是,如果涉及某种形式的递归。将函数拆分为独立原型和定义没有好处。事实上,这种方法有一个明显的缺点,因为它需要额外的维护工作来保持原型和定义的完美同步。出于这个原因,一个合理的方法是仅在必要时提供一个单独的原型。例如,对于在头文件中声明的外部函数,您别无选择,只能将原型和定义分开
对于单个翻译单元内部的函数(我们通常声明为静态的),绝对没有理由创建一个独立的原型,因为函数本身的定义包括一个原型。只需按自然顺序定义函数:首先是低级函数,最后是高级函数,就这样。如果您的程序由单个翻译单元组成,则main
函数将位于最底部
在这种方法中,唯一需要声明独立原型的情况是,如果涉及某种形式的递归。True,但这并不能解决在源代码中使用单独声明的问题