【发布时间】:2014-02-12 18:44:55
【问题描述】:
假设一个函数在被调用之前被定义:
int test(int i) {
/* do something */
}
定义一个函数是否声明它?
【问题讨论】:
-
是的,但你应该事先声明。
标签: c
假设一个函数在被调用之前被定义:
int test(int i) {
/* do something */
}
定义一个函数是否声明它?
【问题讨论】:
标签: c
int func();
这是一个函数声明;它不提供函数的主体,但它确实告诉编译器它可以使用这个函数并期望它会被定义在某个地方。
int func()
{
return 2;
}
这是一个函数定义。 定义某事物意味着提供所有必要的信息来完整地创建该事物。定义函数意味着提供函数体;定义一个类意味着给出类和字段的所有方法。 一旦定义了某些东西,那也算是声明了它;因此,您通常可以同时声明和定义函数、类或变量。但你不必这样做。
所以回答你的问题:是的
【讨论】:
函数定义包含函数声明和函数体。 函数体是执行函数工作的语句块。本例中声明的标识符分配存储空间;它们既是声明又是定义。
查看here 了解更多信息。
【讨论】:
直接来自维基百科:
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 */
}
【讨论】: