函数定义是否声明函数?

时间:2014-02-12 18:44:55

标签: c

假设函数在调用之前已定义:

int test(int i) {
    /* do something */
}

定义函数是否声明了它?

3 个答案:

答案 0 :(得分:3)

int func();

这是一个功能声明;它没有提供函数的主体,但它确实告诉编译器它可以使用这个函数并期望它将被定义在某个地方。

int func()
{
    return 2;
}

这是一个功能定义。 定义某些东西意味着提供所有必要的信息来完整地创建该东西。定义函数意味着提供函数体;定义类意味着给出类和字段的所有方法。 一旦确定了某些内容,这也算作声明;所以你通常可以同时声明和定义一个函数,类或变量。但你没必要。

所以回答你的问题:是的

来自:http://www.cprogramming.com/declare_vs_define.html

答案 1 :(得分:2)

函数定义包含函数声明和函数体。正文是执行函数工作的语句块。此示例中声明的标识符分配存储;它们都是声明和定义。

查看here了解详情。

答案 2 :(得分:1)

直接来自维基百科:

  

C,Perl,PHP或C ++中的函数原型或函数接口是   声明一个省略函数体的函数但是   指定函数的返回类型,名称,arity和参数类型。   函数定义指定函数的功能,函数   原型可以被认为是指定其界面。

此功能可用:

int test(int i) {
    /* do something */
}

int main() {
    int k = test(5);
    return 0;
}

但是,当自动定义函数而不是声明函数时,使用顺序很重要。

此代码不起作用,因为在调用test()时,不会声明或定义它。

int main() {
    int k = test(5);
    return 0
}

int test(int i) {
    /* do something */
}

通过事先声明所有函数,您无需担心它们的定义或调用顺序(只要所有调用都在声明之后发生)。此外,它是一个好习惯,当您处理具有多个C和头文件的大型代码库时,它可以帮助您。以下代码由于声明而编译:

int test(int);    

int main() {
    int k = test(5);
    return 0
}

int test(int i) {
    /* do something */
}