【发布时间】:2016-03-27 17:15:20
【问题描述】:
我会写
#include <stdio.h>
int main(const int argc, const char * const * const argv) {
argv = NULL;
printf("Hello, world\n");
return 0;
}
这不会编译,因为 argv 是 const(这很好)。
但是,我阅读的一份文件建议 char * argv[argc + 1] 作为声明 argv 的更好方法。但是我怎样才能使这种声明风格使 argv 本身成为 const 呢?
#include <stdio.h>
int main(const int argc, const char * const const argv[argc + 1]) {
argv = NULL;
printf("Hello, world\n");
return 0;
}
这可以编译,但我真的不希望它编译。
【问题讨论】:
-
how can I make it so this declaration style makes argv itself const?你不应该那样做。argv不是常量。 -
@Matt
argv是指向main的指针参数。没有理由不能声明为const,只要main不更改它。这就是 OP 问题的重点。 -
argv作为指针不必是const并且该数组由标准定义为不是const限定的。见 5.1.2.2.1p2 -
@Olaf
main是一个函数。如果它想将其参数之一限制为const,为什么不能呢?我知道它没有必须声明它const,但它应该是可能的。它实际上暴露了 C 中数组参数表示法的一个缺陷,因为使用指针表示法可以实现所需的效果,代价是放弃数组大小信息。 -
char * argv[argc + 1]和char * argv[]和char ** argv之间没有区别。那么为什么不坚持到最后呢?
标签: c arrays parameters constants