除了 "int main(int argc, char **argv)" 之外,我可以安全地使用名称中包含 "main" 的函数吗?

Can I safely use functions containing "main" in their name besides "int main(int argc, char **argv)"?

最近我遇到了 this micro article 其中陈述了以下内容:

  1. In your C program, you can have only one "main" function, whether it is called "main" or otherwise. If you use IPA, IPA will terminate with an error message issued when more than one "main" function is detected.

我是否正确理解 main 名称(或明确定义为入口点的 int main() 替换的其他名称)是一个重要部分,例如,我int main(int argc, char **argv) int sub_main(int argc, char **argv) 可以在同一节目中吗?

如果没有,并且如果有一个 main 作为函数名称的一部分 and/or (int argc, char **argv) 作为参数我可能有问题,将更改参数的位置int sub_main(char **argv, int argc) 有什么区别吗?

到目前为止我没有遇到任何问题,所以假设 int main(int argc, char **argv)int sub_main(int argc, char **argv) 可以愉快地共存。尽管如此,还是可以方便地确定。

只有函数“main”的确切名称对于编译器知道程序从哪里开始很重要。

根据C标准,你的代码中必须只有一个main函数,这就是执行的起点。 C 定义了以下声明 only :

  • int main(void)
  • int main(int, char **)(或等价物,比如 char *argv[]

也可能有(与any C 函数一样,只有一个定义,在所有文件中(但可能有任意数量的声明)。

sub_main() 或任何其他不完全 main() 的变体是完全合法的。函数的名称及其类型是不同的 - 名称是唯一的,类型不需要。

因此对于 void fn(void);fn 是“名称”(也称为“标识符”),而 void (void) 是类型(不带参数的函数和 returns 没有)。

当您想确定地知道时,一定要问其他人,就像您在这里所做的那样,但也要确保在重要的地方将人们的答案与 C 标准 联系起来。