在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[])
它是受支持的,不受支持的还是非法的?
答案 0 :(得分:3)
在C语言中,实现允许main
函数基本上支持 any 类型,因此,很可能是您的特定实现允许您提出的各种形式。 (实际上,似乎允许使用三参数版本公开环境。)但是,仅要求实现才能接受两种形式
int main(void)
和
int main(int, char**)
由于int(int, const char**)
与int(int, char**)
的类型不同,因此严格地说,您建议的“已定义”版本不受支持,并且属于第一条规则。但是,由于char*
和const char*
在ABI方面的布局方式完全相同,因此很有可能起作用,并且得到的数据是仍然可变。
请进一步注意,int f(int)
和int f(const int)
是相同相同的原型,因此这里的参数高级限定没有问题。