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

标签 c arguments constants program-entry-point

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/

相关文章:

javascript - 正确使用 const 定义函数

c++ - "A reference may be bound only to an object",为什么 "const int &ref = 3;"有效?

c - 尝试通过更改语法来解决 Shift Reduce 冲突

创建相互指向的新节点

c - c中ruby Exception类对象的扩展是什么?

c - 如果 LONG_MAX 为 2147483647,strtol ("-2147483648", 0, 0) 是否溢出?

r - R中函数自变量的所有有效值

c++ - C/C++如何调用外部程序并获取多个返回值?

MySQL,存储过程(存储函数)和参数作为查询中的行

c++ - 处理模板参数中的 cv 修饰符