在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”版本是严格来说不需要支持,属于第一条规则。但是,很可能 可以工作,因为 char*
和 const char*
就 ABI 而言以相同的方式布局,并且您获得的数据无论如何都是可变的。
进一步注意 int f(int)
和 int f(const int)
是相同相同的原型(prototype),所以没有问题这里是关于参数的顶级限定。
关于c - 用常量参数定义 main (const int argc, const char * const argv[])?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50978463/