在main之前定义一个函数?

Nee*_*ran 9 c c99

C99中是否需要功能声明/原型?

我目前正在头文件中定义我的函数,并在主文件中定义#include-ING.在C99中可以吗?

为什么大多数程序员在main()之前声明/原型化函数并在main()之后定义它?是不是更容易在main之前定义它们并避免所有的声明/原型?

header.h文件的内容:

int foo(int foo)
{
// code
return 1;
}
Run Code Online (Sandbox Code Playgroud)

主文件内容:

#include <stdio.h>

#include "header.h"

int main(void)
{
foo(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ieu 14

在C中如何以及在何处原型化和定义函数:

  1. 您的函数仅在特定的.c文件中使用:在.c文件中将其定义为静态.该函数仅对此文件可见并编译.

  2. 您的函数用于多个.c文件:选择一个适当的c文件来托管您的定义(例如,在foo.c文件中所有与foo相关的函数),并且有一个相关的头文件以使所有非静态(想想公共)函数原型.该函数只编译一次,但对包含头文件的任何文件都可见.一切都将在链接时汇集在一起​​.可能的改进:总是制作相关的头文件,第一个包含在其c文件中,这样,您将确保任何文件都可以安全地包含它而不需要其他包含使其工作,参考:大型C++项目(大多数规则也适用于C).

  3. 您的函数是无限的(您确定它是?):在适当的头文件中定义静态内联函数.如果可能的话,编译器应该通过定义替换对函数的任何调用(想像宏一样).

c中前后另一个函数(你的主函数)的概念只是风格问题.要么:

static int foo(int foo) 
{ 
// code 
return 1; 
} 

int main(void) 
{ 
foo(1); 
return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

要么

static int foo(int foo);

int main(void) 
{ 
foo(1); 
return 0; 
} 

static int foo(int foo)
{ 
// code 
return 1; 
} 
Run Code Online (Sandbox Code Playgroud)

将导致相同的程序.第二种方式是程序员首选,因为每次声明使用其他函数的新函数时,您不必重新组织或声明新原型.另外,您可以获得文件中声明的每个函数的清单.从长远来看,它可以让您和您的团队更轻松.


AnT*_*AnT 6

C99 中需要函数声明。C99 中不需要函数原型。

在调用点之前声明函数并在调用点之后定义它们是构造程序代码的流行方法。然而,这绝不是“大多数”程序员所做的事情。相反,更流行的方法是在第一次调用之前定义函数,在这种情况下不需要单独声明。这种方法需要较少的维护,这就是为什么它比您所描述的更受欢迎的原因。

单独的声明/定义通常仅与外部函数一起使用,即与跨多个翻译单元使用的函数一起使用。此类函数在头文件中声明并在实现文件中定义。


Pup*_*ppy 5

人们通常会这样做,因为使用多个文件更容易.如果您在标题中声明,那么您可以在需要这些功能的任何地方#include该标题.如果您在标题中定义它们然后包含在另一个翻译单元中,那就是bang.