Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C main()的多个定义_C_Main_Multiple Definition Error - Fatal编程技术网

C main()的多个定义

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_

大家好,尝试使用两个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文件二:

#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
  • 基本上,任何C(甚至C++)程序都是一组相互调用的函数。
    要开始执行程序,必须先选择其中一个函数并调用它。
    按照惯例,此初始函数称为
    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");
    }