VS创建多个源文件时遇到的报错的原因和解决方案( LNK2005 main已经在_中定义和 LNK2005 找到一个或多个重定义的符号)

本文详细解释了VS2022中出现关于多个源文件包含多个main函数的编译错误,提供了解决方案,包括常规删除多余main、新建项目设置启动项、源文件排除和更改主函数等,强调了项目中主函数的唯一性原则。
摘要由CSDN通过智能技术生成

关于VS 2022编写多个源文件的问题



出现的问题如下图:

在这里插入图片描述


注意:有时主函数可能是其他函数,而不是‘main’函数,本文中的main函数指的都是主函数

一、问题原因

这个错误的原因就是一个源文件中有多个main函数,学过C语言的人都知道,main是主函数,是一个程序的入口,但是同一个项目中不能出现多个main函数入口。

二、解决方法

1、常规解决方案

源文件中只保留一个main函数就可以解决问题

以下方法均是在迫不得已的情况下使用,如果是非迫不得已,还是建议一个项目只保留一个拥有主函数入口的源文件

2、通过直接选择启动项(需新建项目)

①右击解决方案,选择“添加”,点击“新建项目”

在这里插入图片描述

②正常创建好项目后,新项目会直接创建在此解决方案下,然后在源文件下创建新的文件(和平常创建的方式一样)

不会创建项目的可以去学习软件的使用方法(本文使用 VS 2022 | 前后版本区别不大):

文章链接,可以直接点击进入

在这里插入图片描述

③右击你希望运行的项目(project),点击选择“设为启动项”

在这里插入图片描述

④此时在运行,就是设置的项目被执行了

3、直接对源文件进行设置(无需新建项目)

①右击源文件中需要排出的文件,点击“属性”

在这里插入图片描述

②在从生成中排除后的选项中选择 “是”,然后点击“确定”

在这里插入图片描述

③此时在运行项目,你就会发现加红点的源文件不在运行

在这里插入图片描述

此方法对多个源文件时(超过两个)均使用

4、通过更改其他源文件的主函数

将主函数进行改变,这样程序既不会运行这个源文件,也不会报错

但主函数依然是main函数,没有对主函数本身进行修改

在这里插入图片描述

此方法不适合于学校交作业,因为本身代码就是错误,没有正确使用主函数

三、进一步解释

1、能否创建多个源文件?

答案是肯定的,当然可以创建多个源文件,在软件工程中,如果开发一个应用,总会创建多个源文件,但对于初学者,创建多个源文件,可能是为了开发多个应用。

也就是说创建的每一个 “.c文件” 都可以运行,相当于每一个 “.c文件” 都是一个程序,都是一个独立的App,但是不可能实现,尤其是在软件工程中。有些同学可能会说,为什么有些老牌的开发软件允许同一个项目可以有多个main函数,因为时代在变化,以前的标准对于现在已经不在适用,我们所做的应该是积极学习新的规则,这样才不会被时代抛弃。

即最终的可执行文件只能有一个main函数作为入口点。这种设计并不是语言级别的规定,而是项目组织和构建系统的一种实践。在现代的软件开发中,为了代码的清晰性和可维护性,通常还是建议只有一个主入口点。

2、为什么一个项目中不能有多个main函数

在许多编程语言中,一个项目只能有一个主函数(通常是“main”函数)。这是因为主函数是程序的入口点,操作系统在运行程序时会从这里开始执行。如果一个项目中有多个主函数,操作系统会困惑不知道从哪个函数开始执行,这会导致程序的行为不确定。

在C语言中,一个程序只能有一个“main”函数。例如:

int main() {
    // 主函数的代码
    return 0;
}

在Java中,也只能有一个“main”方法:

public class MainClass {
    public static void main(String[] args) {
        // 主方法的代码
    }
}

在其他语言中也有类似的规定,一个项目中只有一个入口点有助于确保程序的执行流程是可控的,并且可以提高代码的清晰性和可维护性。

如果有多个功能点需要执行,通常会在一个主函数中调用其他函数或模块。这样可以实现代码的模块化和组织,使程序更易于理解和维护。如果你有多个独立的程序,可以将它们分别编写为不同的项目或模块,并在需要时单独运行它们。


总结

本文着重解释了当使用VS创建多个源文件时出现报错( LNK2005 main已经在_中定义和 LNK2005 找到一个或多个重定义的符号)的原因,以及介绍了四种如何在同一个项目中创建多个主函数并且可以独立运行的方法,以便于大家在解决问题的前提下更好的满足其他需求。

感谢大家的观看,如果对本系列文章感兴趣的朋友也请多多点赞分享,收藏关注不迷路,如有疑问可以在文章下方评论或者直接私聊我,我会在第一时间回复大家,大家的支持也是我第一动力。

  • 29
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloudier.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值