C语言/C++ main函数参数argc和argv不是const的原因

博客讨论了C语言标准函数int main(int argc, char *argv[])中,为何argc和argv通常不声明为const。原因在于历史兼容性和某些UNIX API如getopt可能会修改argv数组。尽管在现代编程中更倾向于使用const,但这样做会导致与旧代码不兼容,并且会影响到一些经典的编程示例。
摘要由CSDN通过智能技术生成

 翻译自:Why is argc not a constant?

int main(int argc, char *argv[])

Effective C++ Item#3指出"应尽可能使用const",为何不将argc和argv默认设为const?在何种情景下argc会被修改?

对此问题的回答是:

该问题有历史因素。C将这些参数定义为"非常量"以兼容现有的C代码。诸如getopt等的UNIX API会修改argv[],所以不能被设为const。有趣的是,getopt的原型表明它不会修改argv[]本身,而可能修改其指向的地址:it appears they know they're being naughty.。

给argc和argv加上const不会获得什么益处,而且这会使得一些老旧的编程练习失效:

// print out all the arguments:
while (--argc)
    std::cout << *++argv << std::endl;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值