嗨,大家好试着使用两个main()并得到这个错误的main()的多个定义。我重命名了我的主要功能然后为什么是这个错误,并且首先在这里为我的print()定义。 头文件:
#ifndef TOP_H_
#define TOP_H_
#include <stdio.h>
#include <string.h>
#define onemain main
#define twomain main
inline void print();
#endif /* TOP_H_ */
c file one:
#include "top.h"
void print();
int onemain()
{
print();
return 0;
}
void print()
{
printf("hello one");
}
c文件二:
#include "top.h"
void print();
int twomain()
{
print();
return 0;
}
void print()
{
printf("hello two");
}
答案 0 :(得分:10)
基本上任何C(甚至是C ++)程序都是一堆相互调用的函数
要开始执行程序,您必须先选择其中一个函数并先调用它
按照惯例,这个初始函数称为main
。
当您在项目中包含多个源文件时,IDE会将它们全部编译,然后调用链接器,该链接器将查找名为main
的单个函数,并生成一个可调用它的可执行文件。
如果由于任何原因,您在所有这些文件中定义了两个“主要”函数,链接器将警告您它无法自行选择您希望作为程序起点的那个。
答案 1 :(得分:4)
onemain
和twomain
的宏替换发生在编译器正确看到程序之前,因此没有区别。这些函数都命名为main
。
C ++允许具有相同名称的不同函数,但不允许完全相同的函数签名的两个定义。没有办法形成一个能够达到过载的函数调用表达式。另外,函数是同一个实体,有一件事不能有两个定义。
另外,在C ++中main
不能重载,因为程序应该在调用唯一的main
函数时启动,并且任何给定的系统都会检测main
的格式extern
特定程序使用各种允许的格式。 (此自动检测功能也适用于C.)
但你不是在问C ++;在C中,没有函数重载,即使对于不同的签名,也没有相同名称的重新定义。 C中{{1}}个链接的每个名称唯一标识一个实体,因此不能有两个。
目前还不清楚你想要的结果程序是做什么的。很可能你需要建立两个独立的程序。
答案 2 :(得分:3)
我不明白你的问题 - 你的错误信息很清楚:
print()
的2个定义,它们会发生碰撞。删除一个。main()
的2个定义 - 您的#define
将替换您的onemain
和twomain
函数,并将其有效地命名为main
。< / LI>
醇>
答案 3 :(得分:0)
你超越内置的print
,关于main
,尝试想象一辆带有两个方向盘的汽车......它不会工作......
您的C程序有两个至少有一个main
,因此计算机知道程序的起始位置。
如果您有2个具有两个main
功能的文件,那么您有两个不同的程序。
答案 4 :(得分:0)
C程序不可能有多个main()。此外,main()应声明为int
并返回一个整数值(通常为0)。