用常量参数定义 main (const int argc, const char * const argv[])?

Defining main with constant arguments (const int argc, const char * const argv[])?

glibc 中,main 被记录为,

int main (int argc, char *argv[])

或者,

int main (int argc, char *argv[], char *envp[])

如果你不想改变它们,你能把所有的参数都定义为const吗?

int main (const int argc, const char * const argv[])

支持、不支持还是非法?

在 C 中,允许实现基本上支持 main 函数的 any 类型,因此您的特定实现很可能允许各种形式你提议了。 (而且确实好像是允许暴露环境的三参数版本。)不过,实现只是required接受两种形式

int main(void)

int main(int, char**)

由于 int(int, const char**)int(int, char**) 的类型不同,因此您提议的 "constified" 版本严格来说不需要支持,属于第一条规则。然而,很可能 工作,因为 char*const char* 就 ABI 而言以相同的方式布局,并且您的数据re given 无论如何都是可变的。

进一步注意,int f(int)int f(const int)相同相同的原型,因此这里参数的顶级限定没有问题。