在标准 C 中(我相信 C++ 也是如此),您不能,至少对于托管环境不能(但见下文)。该标准规定 C 代码的起点是main
。标准(c99)没有留下太多争论的余地:
5.1.2.2.1 程序启动: (1) 程序启动时调用的函数名为main。
就是这样。然后它对参数和返回值进行了一些胡扯,但实际上没有更改名称的余地。
这是针对托管环境的。该标准还允许独立的环境(即,对于嵌入式系统等,没有操作系统)。对于独立环境:
在独立环境中(其中 C 程序执行可以在没有操作系统的任何好处的情况下进行),程序启动时调用的函数的名称和类型是实现定义的。除了第 4 条要求的最小集之外,任何可用于独立程序的库设施都是实现定义的。
你可以在C中使用“欺骗”实施这样你就可以让它看起来像main
不是入口点。事实上,这就是早期 Windows 编译器所做的标记WinMain
作为起点。
第一种方式:链接器可能在文件中包含一些预主启动代码,例如start.o
正是这段代码运行来设置 C 环境,然后调用main
。没有什么可以阻止你用调用的东西替换它bob
反而。
第二种方式:某些链接器通过命令行开关提供了该选项,以便您可以更改它而无需重新编译启动代码。
第三种方式:您可以链接这段代码:
int main (int c, char *v[]) { return bob (c, v); }
然后你的入口点your代码看起来是bob
而不是main
.
然而,所有这些虽然可能具有学术兴趣,但并没有改变这样一个事实:在我几十年的代码削减过程中,我想不出有任何一个单独的情况是必要的或可取的。
我会问面试官:你为什么要want去做这个?