博客
关于我
C语言/C++ main函数参数argc和argv不是const的原因
阅读量:594 次
发布时间:2019-03-09

本文共 882 字,大约阅读时间需要 2 分钟。

在C语言编程中,有时会对argcargv这两个参数的类型产生疑问。大家知道,在编程实践中,尽可能使用const是一个不错的习惯。但是,为何我们不能将argcargv默认设为const类型呢?这背后有着什么样的历史原因和编程机制呢?

如果不清楚这些背景知识,可能会觉得这是一个简单的类型设定问题。事实上,这涉及到C语言的历史演变以及与其他编程语言的兼容性。首先,argcargv在C语言中原本被定义为非常量类型。这一设定是因为早期的C语言实现需要与现有的C代码兼容当时的规范。而argv数组存储了程序启动的命令行参数列表,这意味着程序可能会对argv进行修改。

接着,尽管getopt是一种UNIX编程接口,它的原始设计并不会直接修改argv数组本身。然而,它确实会修改指向argv中的元素的指针。这说明,即使使用const类型,也无法完全保护argv)数组不受外部修改的影响。因此,getopt等函数仍然需要将argv设定为非常量类型。

现在,如果我们尝试将argcargv设为const,这并不会带来什么实际的好处。相反,这可能会引发一系列问题。例如,如果您的程序中有这样的代码片段:while (--argc),这样的写法依赖于argc可以被修改(即可以执行后缀操作)。如果argcconst类型,这段代码将无法正常工作。

许多从业多年的开发者依赖于这种通过指针进行操作的获取命令行参数方式。这不仅是因为这种方法在处理较久的编程范式时更加熟悉,而且在某些情况下,这样的操作可能会比使用现代的turnover接口更高效。尽管如此,这也反映出在编程习惯和工具选择上需要根据项目需求和使用场景进行权衡。

换句话说,在没有明确的需要将argcargv修改保护的情况下,将它们设为const类型并没有实际意义。而且,这样的设定可能会破坏许多现有的程序代码,尤其是那些依赖于argcargv的经典实现。如果您不确定这些细节,建议在开发过程中进行横向比较,并仔细阅读相关文档和代码示例。只有当明确知道程序将会在什么时候修改这些变量时,才可以做出类型设定的选择。

转载地址:http://wshpz.baihongyu.com/

你可能感兴趣的文章
Oracle select表要带双引号的原因
查看>>
Oracle SOA Suit Adapter
查看>>
Oracle Spatial GeoRaster 金字塔栅格存储
查看>>
Oracle spatial 周边查询SQL
查看>>
Oracle Spatial空间数据库建立
查看>>
UML— 活动图
查看>>
oracle sqlplus已停止工作,安装完成客户端后sqlplus报“段错误”
查看>>
oracle SQLserver 函数
查看>>
oracle sql分组(group,根据多个内容分组)在select之后from之前 再进行select查询,复杂子查询的使用
查看>>
Oracle Statspack分析报告详解(一)
查看>>
oracle tirger_在Oracle中,临时表和全局临时表有什么区别?
查看>>
Oracle Validated Configurations 安装使用 说明
查看>>
oracle where 条件的执行顺序分析1
查看>>
oracle 中的 CONCAT,substring ,MINUS 用法
查看>>
Oracle 中的 decode
查看>>
oracle 中表一对多取多方的最新的一条数据
查看>>
oracle 使用 PL/SQL Developer创建表并插入单条、多条数据
查看>>
oracle 使用leading, use_nl, rownum调优
查看>>
oracle 修改字段类型方法
查看>>
Oracle 修改数据库表数据提交之后进行回滚
查看>>