main()的多重定义

嗨伙计们试图使用两个main()并获得此错误多次定义main()。 我重命名了我的主要function然后为什么是这个错误,并且首先在这里为我的print()定义。 头文件:

#ifndef TOP_H_ #define TOP_H_ #include  #include  #define onemain main #define twomain main inline void print(); #endif /* TOP_H_ */ 

c文件一:

 #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"); } 

错误快照

基本上任何C(甚至C ++)程序都是一堆相互调用的函数。
要开始执行程序,您必须选择其中一个函数并首先调用它。
按照惯例,这个初始函数称为main

当您在项目中包含多个源文件时,IDE会将它们全部编译,然后调用链接器,该链接器将查找名为main单个函数并生成将调用它的可执行文件。

如果由于任何原因,您在所有这些文件中定义了两个“主”函数,链接器将警告您它无法自行选择您希望作为程序起点的那个。

一个onemaintwomain onemain的宏替换发生在编译器正确看到程序之前,因此这没有什么区别。 这些函数都命名为main

C ++允许具有相同名称的不同函数,但不允许完全相同的函数签名的两个定义。 没有办法形成一个能够达到过载的函数调用表达式。 另外,函数是同一个实体,有一件事不能有两个定义。

另外,在C ++中, main不能重载,因为程序应该在调用唯一的main函数时启动,并且任何给定的系统都会检测特定程序使用的main格式,以及各种允许的格式。 (此自动检测function也适用于C.)

但你不是在问C ++; 在C中,没有函数重载,即使对于不同的签名,也没有相同名称的重新定义。 C中extern链接的每个名称唯一标识一个实体,因此您不能有两个。

目前还不清楚你想要的结果程序是做什么的。 您很可能需要构建两个单独的程序。

我不明白你的问题 – 你的错误信息很清楚:

  1. 你有2个print()定义,它们会发生碰撞。 删除一个。
  2. 您还有2个main()定义 – 您的#define将替换您的onemainonemain函数,将它们有效地命名为main

你覆盖了内置print ,关于main ,尝试想象一辆带有两个方向盘的汽车……它不会工作……

你的C程序有两个至少有一个main ,所以计算机知道程序的起始位置。 如果您有2个具有两个mainfunction的文件,那么您有两个不同的程序。

C程序不可能有多个main()。 此外,main()应声明为int并返回一个整数值(通常为0)。