错误 LNK2005: hold.obj 中已经定义了 _main

8

您好,请注意,我已经浏览了所有与我遇到的相同错误有关的内容,但是没有找到解决问题的方法。因此,我正在使用MS VC ++ 2010,并且我有两个文件a.c和b.c,每个文件单独运行没有错误,并且每个文件都有简单明了的代码。但是当我将它们一起使用时,会出现以下错误:**错误LNK2005:_main已在a.c中定义**,这个错误也会在Code block IED上出现。我认为这是使用main函数两次造成的。现在该如何为这两个文件使用一个main函数呢?

代码文件 a.c:

#include<stdio.h>
#include<conio.h>

main()
{
    int a =9;
    if(a==7)
    {
        puts("This is number seven ");
    }
    else
    {
        puts("This isn't number seven ");
    }

    getch();
}

代码文件 b.c

#include<stdio.h>
#include<conio.h>

main()
{
    int x=10;

    printf("%d", x);
    getch();
}    

请问您能否发布a.c和b.c的代码?目前情况不是很明确。如果使用了两个主函数导致问题,请创建exec_main.c文件并将您的主函数放在其中。 - ha9u63a7
2
现在我怎样才能使用一个主函数来处理两个文件?定义一个单一的main函数。 - user657267
@user657267 正确!此外,您知道所有内容都从一个主线程运行,因此无论如何都不能有两个。 - ha9u63a7
1
链接器告诉你 main 被定义了两次,因为你确实定义了两次 main - Steve
但是请问我该如何解决这个问题? - Basil
显示剩余2条评论
1个回答

11

一个程序只能有一个主函数,不可能存在两个。你可以将其中一个主函数改名,并创建一个新的主函数来调用它们。

Code file a.c

#include <stdio.h>
#include <conio.h>

void a_main()
{
    int a =9;
    if(a==7)
    {
        puts("This is number seven ");
    }
    else
    {
        puts("This isn't number seven ");
    }


    getch();
}

代码文件 b.c

#include <stdio.h>
#include <conio.h>

void main()
{
   a_main();
   b_main();
}

void b_main()
{
    int x=10;

    printf("%d", x);
    getch();
}

注意,良好的实践是仔细命名函数,使名称描述其功能。例如,在此示例中,您可以将a_main称为PrintIs7OrNot,将b_main称为Print10。


@Basil - 你需要多少个?你是否需要将所有这些主要功能放在一个程序中,还是它们可以分别放在自己的程序中?你可以继续使用c_main,d_main,e_main等。 - Scott Langham
非常感谢Scott,我想现在再问你一个问题,主要的活动文件是a.c正在运行它的代码,那么如何使b.c成为活动文件来运行它的代码? - Basil
@Basil - 抱歉,我不理解你的问题。如果你使用我在答案中给出的示例,a_main() 应该运行,然后 b_main() 应该运行。如果你想要的话,可以更改 main() 中的代码以将这两个函数放在其他顺序中。 - Scott Langham
@ScottLangham 我想问一个关于同一主题的问题,如果我想单独运行两个程序,该怎么办?我是否需要为新程序创建另一个新项目,或者可以在同一项目中添加一个新文件来完成? - Asheesh Sahu
@AsheeshSahu 这取决于你用哪些工具来编写程序。C++ 没有所谓的“项目”概念,但你用来编写程序的工具可能会将文件组织成项目。我使用 Visual Studio 来编写 C++,在 Visual Studio 中,每个程序都需要一个新项目。 - Scott Langham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接