【问题标题】:Why is GCC saying multiple definitions of main? I have one main [closed]为什么 GCC 说 main 的多个定义?我有一个主要的[关闭]
【发布时间】:2017-03-12 13:21:26
【问题描述】:

我可以使用 Microsoft Visual Studio 成功运行和编译我的代码。当我尝试使用 gcc 编译它以通过 SSH 提交我的程序时,我收到一条错误消息,指出 main 有多个定义。我只有一个 main 函数,而且我不会在任何地方调用我的 main 函数。

这是编译器的错误信息:

/tmp/ccsoZK9a.o: In function `main':
ipc_ms1_prof.c:(.text+0x0): multiple definition of `main'
/tmp/cciG56p6.o:ipc_ms1.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status

这是我的代码:

#include <stdio.h>

//Prototype Functions
void welcome(void);
void prnTitle();
void prnFooter(double gTotal);
void clrKyb(void);
void pause(void);
int getInt(void);
int getIntLimited(int lowerLimit, int upperLimit);
double getDbl(void);
double getDblLimited(double lowerLimit, double upperLimit);

int main(void)
{
int iVal = 0;
double dVal = 0.00;
welcome();
printf("listing header and footer with grand total:\n");
prnTitle();

prnFooter(1234.5678);
printf("listing header and footer without grand total:\n");
prnTitle();
prnFooter(-1);

pause();

printf("Enter an integer: ");
iVal = getInt();
printf("You entered: %d\n", iVal);

printf("Enter an integer between 10 an 20: ");
iVal = getIntLimited(10, 20);
printf("Your entered %d\n", iVal);

printf("Enter a floating point number: ");
dVal = getDbl();
printf("You entered: %0.2lf\n", dVal);

printf("Enter a floating point number between 10.00 and 20.00: ");
dVal = getDblLimited(10.0, 20.0);
printf("You entered: %0.2lf\n", dVal);

printf("End of tester program for milestone one!\n");

return 0;
}

void welcome(void)
{
printf("---=== Grocery Inventory System ===---\n\n");
}
void prnTitle()
{
printf("Row |SKU| Name               | Price  |Taxed| Qty | Min |   Total            |Atn\n");
printf("----+---+--------------------+--------+-----+-----+-----+------------|---\n");
}
void prnFooter(double gTotal)
{
printf("--------------------------------------------------------+----------------\n");
if (gTotal > 0)
    printf("                                           Grand Total: |     %12.2lf\n", gTotal);
}

void clrKyb(void)
{
char input = ' ';
//Keep getting user input as long as input is not equal to enter('\n')
do
{
    scanf("%c", &input);
} while (input != '\n');
}
void pause(void)
{//Pause the program as until the user presses enter
printf("Press <ENTER> to continue...");
clrKyb();
}

int getInt(void)
{
char NL = 'x';//NL is x because that is one char whereas a number would be     int                                          
int value;
while (NL != '\n') {
    //loop is broken if not \n so it is routed to another loop to keep loop going until \n
    scanf("%d%c", &value, &NL);
    if (NL != '\n') {
        clrKyb();
        printf("Invalid integer, please try again: ");
    }
}

return value;

}
int getIntLimited(int lowerLimit, int upperLimit)
{
int value = 0;

value = getInt();
while (value < lowerLimit || value > upperLimit)
{//while user input is not within the right numerical range
    //Display error message
    printf("Invalid value, %d < value < %d: ", lowerLimit, upperLimit);
    value = getInt();//call getInt to get user input again
}

return value;
}

double getDbl(void)//Similar to getInt.. double version
{
char NL = 'x';
double value;
while (NL != '\n') {
    scanf("%lf%c", &value, &NL);
    if (NL != '\n') {
        clrKyb();
        printf("Invalid integer, please try again: ");
    }
}

return value;
}
double getDblLimited(double lowerLimit, double upperLimit)
{
double value = 0;

value = getDbl();
while (value < lowerLimit || value > upperLimit)
{
    printf("Invalid value, %lf < value < %lf: ", lowerLimit, upperLimit);
    value = getDbl();
}

return value;
}//Similar to getIntLimited but the double version

【问题讨论】:

  • 这里是编译器的错误信息:/tmp/ccsoZK9a.o: In function main': ipc_ms1_prof.c:(.text+0x0): multiple definition of main' /tmp/cciG56p6.o: ipc_ms1.c :(.text+0x0): 首先在这里定义 collect2: ld 返回 1 个退出状态 够了吗?
  • 您正在链接两个目标文件(至少),并且您显示的文件和 ipc_ms1.c 都在其中定义了 main 函数。
  • 你们是对的。显然,它结合了我的教授资源和我的资源。他的被称为: ipc_ms1_prof.c 我的被称为: ipc_ms1.c 。我刚看了我学校的邮件,他说他忘了写作业说明,我们应该在代码中注释掉我们的主要功能。
  • we should comment out our main function in our code - 这可能违背目的或练习 - 我倾向于建议注释掉你教授的变体

标签: c++ c gcc


【解决方案1】:

检查链接器。通常这意味着另一个目标文件正在同时编译,它也包含一个主函数。所有关联文件中必须只有一个 main 函数。

【讨论】:

  • 你是对的。显然,它结合了我的教授资源和我的资源。他的被称为: ipc_ms1_prof.c 我的被称为: ipc_ms1.c 。我刚看了我学校的邮件,他说他忘了写作业说明,我们应该在代码中注释掉我们的主要功能。
猜你喜欢
  • 2016-09-19
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 2016-08-31
  • 2023-03-18
相关资源
最近更新 更多