'main' 函数是否属于 C 中的函数定义?
Is the 'main' function classified as a function definition in C?
'main' 函数是否属于 C 中的函数定义?
我问的原因是我看到了一段代码,在解释代码顶部的函数声明和底部的函数定义之间的区别时,有人问我 'main' 函数也被认为是函数定义,或者如果它被认为是其他东西(因为与其他函数不同,主函数是必不可少的)。
Main 是一个与其他所有函数一样的函数。只是具有不同的语义和不同的要求。
语义是程序的开始。
要求它有一组预定义的签名
在 C 的托管实现中(正常排序),main()
与任何其他函数相比唯一新颖的功能是:
- 这是程序开始执行的地方。
- 不必预先申报。
- 如果执行到最后的
}
,它的行为就好像在 }
*[= 之前有一个 return 0;
41=].
在所有其他方面,main()
是一个正常的功能。它可以在 C 中递归调用(而 C++ 程序不能递归调用其 main()
)。
由于函数是在指定函数体时定义的,因此当您编写 int main(void) { … }
或 int main(int argc, char **argv) { … }
或任何其他替代方法时,您正在定义函数,因为存在大括号,因此定义了函数体.
* 有关 return 0;
语句的一些小警告参见 What should main()
return in C and C++ 如果return 类型与 int
.
不兼容
'main' 函数是否属于 C 中的函数定义?
我问的原因是我看到了一段代码,在解释代码顶部的函数声明和底部的函数定义之间的区别时,有人问我 'main' 函数也被认为是函数定义,或者如果它被认为是其他东西(因为与其他函数不同,主函数是必不可少的)。
Main 是一个与其他所有函数一样的函数。只是具有不同的语义和不同的要求。
语义是程序的开始。
要求它有一组预定义的签名
在 C 的托管实现中(正常排序),main()
与任何其他函数相比唯一新颖的功能是:
- 这是程序开始执行的地方。
- 不必预先申报。
- 如果执行到最后的
}
,它的行为就好像在}
*[= 之前有一个return 0;
41=].
在所有其他方面,main()
是一个正常的功能。它可以在 C 中递归调用(而 C++ 程序不能递归调用其 main()
)。
由于函数是在指定函数体时定义的,因此当您编写 int main(void) { … }
或 int main(int argc, char **argv) { … }
或任何其他替代方法时,您正在定义函数,因为存在大括号,因此定义了函数体.
* 有关 return 0;
语句的一些小警告参见 What should main()
return in C and C++ 如果return 类型与 int
.