Ali*_*Man 14 c program-entry-point
我唯一接触过编程的是Java,在那里我没有遇到(到现在为止)编写main方法的不同惯例.我一直在学习c(K&R和C编程现代方法)的来源,他们使用的非常不同形式的主要方法(功能).
K&R版本到现在为止:
main() {
blah blah blah;
}
Run Code Online (Sandbox Code Playgroud)
C编程现代方法
int main() {
blah blah blah;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
要么
int main() {
blah blah blah;
//returns nothing
}
Run Code Online (Sandbox Code Playgroud)
为了让事情更加混乱,我见过人们这样做:
int main(void) {
blah blah blah;
}
Run Code Online (Sandbox Code Playgroud)
虽然他们要么返回0,要么没有.我没有在我没有受过教育的假设中认为这只是一个标准问题,但可能更具概念性或更深层次.有人能解释一下这个问题吗?
小智 14
K&R风格已经过时,根据C标准不再正确.
有效的签名是
int main(void)
Run Code Online (Sandbox Code Playgroud)
和
int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)
或者,等效,因为函数中的数组类型仍然调整为指针类型:
int main(int argc, char **argv)
Run Code Online (Sandbox Code Playgroud)签名
int main()
Run Code Online (Sandbox Code Playgroud)
碰巧也是有效的,因为空参数列表意味着任何数量的参数,没有描述*).AFAIK,这可能会有变化,所以不要这样写.写作void是你如何表达这个函数不接受 C中的参数.
C的实现可以自由地提供其他实现定义的入口点.但我上面列出的两个是唯一由标准保证的.
main()如果函数没有返回任何内容,C99 为该状态引入了一个特殊规则,0隐式返回值.所以只有在主要内容中,您才可以跳过return.我的建议是:不要.这只是令人困惑.但这是一个意见.
*)注意这在C++中是不同的,其中parantheses之间没有任何东西确实意味着:没有参数.
C的预标准化版本(称为K&R C)具有默认类型的概念(int如果没有给出).所以在K&R中:
main() {
Run Code Online (Sandbox Code Playgroud)
是相同的:
int main() {
Run Code Online (Sandbox Code Playgroud)
至于int main()和 之间的差异int main(void),空参数列表表示该函数采用未指定数量的参数,而(void)作为参数列表表示该函数不采用任何参数.前者是可以接受的,但后者是首选,因为它更明确.
关于return语句的使用,具有非void返回类型的函数必须用于return返回一个值,除了(从C99标准开始)该main函数.在这种情况下main,缺失return语句意味着返回值为0.
由于隐含return 0的主要是在C99加入,你会看到不取决于哪个版本的程序员符合标准做了一些代码,明确返回有的.
C 标准将签名定义main为
int main(void)
Run Code Online (Sandbox Code Playgroud)
或者
int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)
添加return 0;作为函数中的最后一个语句main是可选的。
标准还提到了一些实现定义的原型。int main()被GCC编译器接受。
main()是一个老式的原型,几乎已被弃用。