int main(void)给出错误

时间:2014-02-14 20:17:21

标签: c++ function int main

Hello编程世界。

我目前正在大学完成我的第一个编程课程,我们的讲师说了这个功能

int main (); //without the curly braces// is valid. 

我可能听错了他/误解了他,因为当我尝试用它运行控制台时,它会出错。但是当我做 int main(){}; 时它运行正常。 所以: 1.无论身体内容如何,​​都需要花括号吗?

  1. 如果没有返回0,函数如何运行。

  2. 使用它,可能的最短的int main / void主函数是什么?

  3. 根据要求,这是错误:

    Undefined symbols for architecture x86_64:
      "_main", referenced from:
         implicit entry/start for main executable
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

    非常感谢你:)

4 个答案:

答案 0 :(得分:4)

在C ++中,main有两个正确的定义:

int main() {
    // ...
}

 int main(int argc, char *argv[]) {
     // ...
 }

或同等学历。 (其他实现定义的表单是可能的,但我们可以忽略它们。返回类型总是int,至少对于托管实现; void main()是错误的。)

大括号{}是函数定义语法的一部分;它们不是可选的。

您可以为main提供声明,例如

int main();

但这样做没有实际意义。这是一个宣言,而不是一个定义 - 你仍然需要在某个地方有一个定义。

最后不需要return 0;。这是一种特殊情况,仅适用于main,而不适用于其他函数:如果执行到达结束},则执行隐式return 0;

最短的法律程序可能是:

int main(){}

答案 1 :(得分:0)

这是函数定义和声明之间的区别(请参阅What is the difference between a definition and a declaration?

基本上是int main();是一个原型告诉编译器你将有一个名为main的函数,它返回一个int,但你还没有实现它。

int main(){}是函数的实现,因此是花括号,给它一个函数体和完整的实现。

答案 2 :(得分:0)

我想澄清一些事情。

int main();

是一个函数声明,即它让其他函数/类知道它 但是,它没有定义 main,这意味着它没有说明main实际上做了什么。
由于每个C ++程序都必须定义 main,因为它首先运行,所以编译器肯定会产生编译错误。

写作

int main() {}

定义 main,指定main什么也不做,所以它会运行。

最后,如果您没有返回任何内容,C ++编译器将隐式添加return 0;语句,因为它是操作系统成功运行的指示器。

有关详情,请参阅https://stackoverflow.com/a/204483/2512775 main应返回的内容。

答案 3 :(得分:0)

您的错误代码表示您尚未正确声明main()函数。你应该做的是添加花括号来表示应用程序将运行的代码块。

虽然如果没有给出一个返回语句,编译器会添加一个返回语句,只需添加一个以确保它。