C main()的多个定义
大家好,尝试使用两个main()并获得main()的多个定义的错误。我重命名了我的主函数,然后为什么会出现此错误,并且首先在这里为我的print()定义了此错误。 头文件:C main()的多个定义,c,main,multiple-definition-error,C,Main,Multiple Definition Error,大家好,尝试使用两个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_
#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文件二:
#include "top.h"
void print();
int twomain()
{
print();
return 0;
}
void print()
{
printf("hello two");
}
您超越了内置的
打印
,关于主
,尝试想象一辆有两个方向盘的汽车。。。它不起作用
您的C程序有两个,至少有一个main
,因此计算机知道程序从哪里开始。
如果您有两个带有两个
main
功能的文件,那么您有两个不同的程序 您超越了内置的打印
,关于主
,尝试想象一辆有两个方向盘的汽车。。。它不起作用
您的C程序有两个,至少有一个main
,因此计算机知道程序从哪里开始。
如果您有两个带有两个
main
功能的文件,那么您有两个不同的程序 一个C程序中不可能有多个main()。另外,main()应该声明为int,并返回一个整数值(通常为0)。一个C程序中不可能有多个main()。另外,main()应该声明为int
,并返回一个整数值(通常为0)。在编译器正确看到程序之前,onemain
和twomain
的宏替换发生,所以这没有什么区别。这两个函数都命名为main
C++允许使用相同名称的不同函数,但不允许使用完全相同的函数签名的两个定义。没有办法形成一个函数调用表达式,该表达式将达到任何一个重载。此外,函数是同一个实体,一件事不能有两个定义
<> P>此外,在C++ <代码>主< /代码>不能重载,因为程序被要求在唯一的<代码>主< /代码>函数被调用时,任何给定的系统都检测出特定代码使用的“<代码>主< /代码>格式,以各种允许的格式使用。(此自动检测功能也适用于C。)
但你并不是在问C++;在C语言中,如果没有函数重载,就不会对相同的名称进行重新定义,即使是对不同的签名。C中
extern
链接的每个名称都唯一标识一个实体,因此不能有两个
不清楚您希望生成的程序做什么。很可能您需要构建两个独立的程序。在编译器正确看到程序之前,
onemain
和twomain
的宏替换发生,因此这没有什么区别。这两个函数都命名为main
C++允许使用相同名称的不同函数,但不允许使用完全相同的函数签名的两个定义。没有办法形成一个函数调用表达式,该表达式将达到任何一个重载。此外,函数是同一个实体,一件事不能有两个定义
<> P>此外,在C++ <代码>主< /代码>不能重载,因为程序被要求在唯一的<代码>主< /代码>函数被调用时,任何给定的系统都检测出特定代码使用的“<代码>主< /代码>格式,以各种允许的格式使用。(此自动检测功能也适用于C。)
但你并不是在问C++;在C语言中,如果没有函数重载,就不会对相同的名称进行重新定义,即使是对不同的签名。C中
extern
链接的每个名称都唯一标识一个实体,因此不能有两个
不清楚您希望生成的程序做什么。很可能您需要构建两个独立的程序。我不明白您的要求-您的错误消息非常清楚:
print()
定义。移除一个main()
-您的#define
s将替换onemain
和twomain
函数,有效地将它们命名为main
我不明白您的要求-您的错误信息非常清楚:
print()
定义。移除一个main()
-您的#define
s将替换onemain
和twomain
函数,有效地将它们命名为main
要开始执行程序,必须先选择其中一个函数并调用它。
按照惯例,此初始函数称为
main
当您在一个项目中包含多个源文件时,IDE会编译所有源文件,然后调用链接器,该链接器会查找一个名为main
的函数,并生成一个可执行文件来调用它
如果出于任何原因,您在所有这些文件中定义了两个“主”函数,链接器将警告您,它无法自行选择哪个函数作为程序的起点。基本上,任何C(甚至C++)程序都是一组相互调用的函数。要开始执行程序,必须先选择其中一个函数并调用它。
按照惯例,此初始函数称为
main
当您在一个项目中包含多个源文件时,IDE会编译所有源文件,然后调用链接器,该链接器会查找一个名为main
的函数,并生成一个可执行文件来调用它
如果出于任何原因,您在所有这些文件中定义了两个“main”函数,链接器将警告您,它无法自行选择哪个函数作为程序的起点。这是不正确的-在C(不是C++)中可以void@EdHeal虽然你说的基本上是对的,但主要的
#include "top.h"
void print();
int twomain()
{
print();
return 0;
}
void print()
{
printf("hello two");
}