在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
函数,因此您的特定实现很可能允许您提出的各种形式。(事实上,它似乎允许公开环境的三参数版本。但是,实现只需要接受两种形式
int main(void)
和
int main(int, char**)
由于int(int, const char**)
与int(int, char**)
的类型不同,因此您提出的"constified"版本严格来说并不要求支持,并且属于第一条规则。但是,它很可能有效,因为就 ABI 而言,char*
和const char*
的布局方式相同,并且您获得的数据无论如何都是可变的。
进一步请注意,int f(int)
和int f(const int)
是相同的原型,因此在参数的顶级限定方面没有问题。