【发布时间】:2021-01-07 22:44:11
【问题描述】:
我看到main() 函数通常称为:
int main(int argc, char** argv)int main(int argc, char* argv[])int main(void)
与这些定义相关:
- 从技术上讲,
char** argv和char* argv[]是一个优先于另一个,或者这 100% 可以互换? - 因为
argc和参数字符串(应该是?)都是不可变的,为什么它们不是const?还是这无关紧要,只是出于惯例/历史目的而被省略?我想这可以通过:const char **argv = (const char **) argv;来完成,但很好奇为什么这还没有完成(例如,是否有理由更改收到的参数?)
【问题讨论】:
-
这能回答你的问题吗? Why is argc not a constant?
-
1) 它们是 100% 绝对相同的 2) argv 参数不是一成不变的……不过我不赞成“扩展”它们……
argv[1][len = strlen(argv[1])] = '*'; argv[1][len+1] = 0; -
@Sprite 是的,这很好,但问题是一个被标记为
C而另一个被标记为C++- 可能有 C 和 C++ 标记的副本? -
关于
argc通常没有太多理由将值参数声明为const。这也会使非常惯用的while(argc--) printf("%s\n", *argv++);无效。