Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是否使用原型+;定义而不仅仅是定义加速程序?_C_Function_Prototype - Fatal编程技术网

C 是否使用原型+;定义而不仅仅是定义加速程序?

C 是否使用原型+;定义而不仅仅是定义加速程序?,c,function,prototype,C,Function,Prototype,我对C编程非常陌生,但对Python、Java和Perl的经验有限。我只是想知道在main()上面有一个函数的原型,在main()下面有这个函数的定义,而不是在main()上面有这个函数的定义,有什么好处。根据我所读到的,这个定义也可以作为一个原型 提前感谢, 当其他人想要使用你的库时,你可以给他们标题(包含原型),而不给他们你的代码 例子?Windows SDK 如果两个函数相互调用,则至少需要其中一个函数的原型 对编译后的代码没有性能影响* *注:嗯,我想可能有。如果编译器决定将该方法放在

我对C编程非常陌生,但对Python、Java和Perl的经验有限。我只是想知道在main()上面有一个函数的原型,在main()下面有这个函数的定义,而不是在main()上面有这个函数的定义,有什么好处。根据我所读到的,这个定义也可以作为一个原型

提前感谢,

  • 当其他人想要使用你的库时,你可以给他们标题(包含原型),而不给他们你的代码

    例子?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,但这并不能解决在源代码中使用单独声明的问题