在C中,是否可以创建一个名为Main()的函数?

时间:2016-08-28 19:12:08

标签: c main case-sensitive uppercase

可以在C中创建一个名为Main()且函数为 M 的函数吗? 由于具有相同名称但不同案例的两个元素被视为单独的实体,因此我认为Main()可以创建,但我只需要确认。

5 个答案:

答案 0 :(得分:4)

当然,为什么不呢?预处理器和编译器并不关心"Main""main" 基本相似。 C区分大小写,因此"Main""main"是两个完全不同的名称。 (它可能无法提供可读性,但没有技术原因你不能)例如,

#include <stdio.h>

int Main (int argc, char **argv)
{
    for (int i = 1; i < argc; i++)
        printf (" %2d : %s\n", i, argv[i]);

    return argc;
}

int main (int argc, char **argv) {

    printf ("\n %d arguments.\n", Main (argc, argv) - 1);

    return 0;
}

示例使用/输出

$ ./bin/mainMain The quick brown fox jumps over a lazy dog.
  1 : The
  2 : quick
  3 : brown
  4 : fox
  5 : jumps
  6 : over
  7 : a
  8 : lazy
  9 : dog.

 9 arguments.

答案 1 :(得分:2)

int Main (void)
{
   return 0;
}

int main (void)
{
   return 0;
}

完美地编译和链接。它区分大小写。

答案 2 :(得分:1)

这是一个可怕的想法,一些不严格符合的环境可能保留该名称。但是链接器应该区分大小写,并且不保留带有大写字母的Main。

答案 3 :(得分:1)

您已经得到了答案,但只是直接从C11添加了一些权威性引用,章节§5.1.2

  

执行环境:

     

定义了两个执行环境:独立和托管。在这两种情况下,   程序启动发生在执行调用指定的C函数时   环境。 [...]

然后,§5.1.2.2,托管环境,p1,“程序启动”

  

程序启动时调用的函数名为main。 [...]

如上所述,据我们所知,C 区分大小写,(引用§6.4.2.1/ 2,“标识符”,一般)

  

标识符是一系列非数字字符(包括下划线_,   指定的小写和大写拉丁字母,以及其他字符和数字   6.2.1中描述的一个或多个实体。 小写和大写字母不同。 [....]

所以与main()没有相同大小写的标识符main()不一样,无论是Main()MAIN(),{{ 1}}或任何其他可能的组合。就C而言,它们都是不同的标识符。

所以,回答

  

在C中,是否可以创建一个名为Main()的函数?

肯定是肯定的。

只是为了清理一下,如果你创建maiN()并遗漏Main(),编译器本身就无法知道你的意思{ {1}}编写main(),因为它们是编译器的不同标识符。

答案 4 :(得分:0)

只有当你用大写写一个或多个字母时,我认为,像Main或MAIN一样,否则你的编译器将无法告诉你想要哪个主要因为main已经是C中的一个函数。 注意:我也是初学者,所以我可能错了。