用常量参数定义 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)
是相同相同的原型,因此这里参数的顶级限定没有问题。
在 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)
是相同相同的原型,因此这里参数的顶级限定没有问题。