定义这样一个函数的目的是什么?

时间:2017-12-10 16:22:55

标签: c function

int func (int,int);

int main ()
{ 
     printf("hello");
}

考虑上述功能。定义func等函数的目的是什么?我反复看过这个。

4 个答案:

答案 0 :(得分:1)

int func(int, int);

定义函数,但通过提供其原型来声明它。这是编译器的“承诺”,最新的链接器将提供一个暴露这种函数的模块。

功能的原型包括:

  • 返回类型
  • 名称
  • 类型和参数的顺序

参数的名称与声明的上下文无关。

只需要为函数的实现提供函数的参数'名称,这可能如下所示:

int func(int a, int b)
{
  return a + b;
}

另一方面,这个

int func(int a, int)
{
  return a;
}

无效

C标准明确指出:

  

6.9.1/5 Function definitions

     

如果声明符包含参数类型列表,则每个参数的声明应为   包括标识符,除了由单个参数列表组成的特殊情况   void类型的参数,在这种情况下不应有标识符。没有声明清单   应该遵循。

答案 1 :(得分:1)

所有其他答案都没有明确回答正确的问题,所以我在这里添加一个。

首先,它不是定义的功能,因为身体缺失。这种语义称为函数声明

在调用函数之前,编译器需要知道函数究竟是什么。这被命名为"原型"。在生成调用函数的正确代码之前,必须知道原型。请考虑以下代码:

// No previous info
int a = func(1, 3);

编译器不知道它是在调用int func(int, int)还是long func(char, double),如果实际函数是FILE* func(void*),它也不会执行错误检查。

使用正确的原型,编译器能够执行必要的检查并生成该函数调用的相应代码。

答案 2 :(得分:0)

它不是函数定义,而是函数声明。函数声明通知编译器函数具有的参数个数,函数参数的类型以及函数返回值的类型。

  

1)它告诉函数返回的数据的返回类型。

     

2)它告诉传递给函数的参数数量。

     

3)它告诉每个传递参数的数据类型。

     

4)它还告诉参数传递给的顺序   功能

     

5)它告诉函数的名称(标识符)。

答案 3 :(得分:0)

这只是一个函数的函数声明,告诉编译器名称为func的函数在结尾处存在定义。
考虑这个例子:

   #include<stdio.h>
    int func (int,int);
    int main()
    {
         printf("hello\n");
         int c= func(5,4);
         printf("%d\n",c);

    }
    int func(int a, int b)
    {

         return a+b;
    }