int main(void) 给出错误

Posted

技术标签:

【中文标题】int main(void) 给出错误【英文标题】:int main(void) giving error 【发布时间】:2014-03-14 08:53:42 【问题描述】:

编程世界你好。

我目前正在大学学习我的第一门编程课程,我们的讲师说功能

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

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

    如果没有返回 0,函数是如何运行的。

    使用这个,可能的最短 int main / void main 函数是什么?

根据要求,这是错误:

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)

非常感谢:)

【问题讨论】:

int main(); 声明但没有定义 main。要定义 main,您至少需要int main() 。也就是说,您需要一个由大括号 () 分隔的函数体。 “它给出错误”是什么意思?告诉我们(通过更新问题,而不是通过回复此评论)错误是什么。如果有错误消息,请将其复制并粘贴到您的问题中。 【参考方案1】:

您的错误代码意味着您没有正确声明 main() 函数。您应该做的是添加花括号来表示您的应用程序将在其中运行的代码块。

虽然编译器在没有给出return语句的情况下会添加一个return语句,但只需添加一个以确保。

【讨论】:

【参考方案2】:

我想澄清一些事情。

int main();

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

通过写作

int main() 

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

最后,如果您不返回任何内容,C++ 编译器将隐式添加 return 0; 语句,因为它向操作系统表明程序运行成功。

有关更多信息,请参阅https://***.com/a/204483/2512775,了解main 应返回的内容。

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

定义是main里面的操作。一个声明告诉编译器在某个时候会有一个“main”,所以它应该自己准备。【参考方案4】:

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

int main() 
    // ...

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

或等价物。 (其他实现定义的形式也是可能的,但我们可以忽略它们。返回类型始终为int,至少对于托管实现而言;void main() 是错误的。)

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

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

int main();

但是这样做没有任何意义。那是一个声明,而不是一个定义——你仍然需要在某个地方有一个定义。

末尾的return 0; 不是必需的。这是一个仅适用于main 的特殊情况,不适用于其他函数:如果执行到结束,它会执行隐式return 0;

最短的法律程序可能是:

int main()

【讨论】:

以上是关于int main(void) 给出错误的主要内容,如果未能解决你的问题,请参考以下文章

C中的int main()与void main()

Dev C++为啥不支持以void main()为主函数的空函数C程序?老师给出的一直都是以Tu

void main如何返回0?

错误 C2446:“==”:没有从“int”转换为“int (__thiscall keyboard::*)(void)”

此代码未运行,并且参数类型给出错误

实例化模板类时出现链接器错误