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

时间:2018-06-21 22:53:47

标签: c arguments constants main

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[])

它是受支持的,不受支持的还是非法的?

1 个答案:

答案 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)相同相同的原型,因此这里的参数高级限定没有问题。