博客
关于我
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/

你可能感兴趣的文章
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
查看>>
NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
查看>>
NIH发布包含10600张CT图像数据库 为AI算法测试铺路
查看>>
Nim教程【十二】
查看>>
Nim游戏
查看>>
NIO ByteBuffer实现原理
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>
NIO三大组件基础知识
查看>>
NIO与零拷贝和AIO
查看>>
NIO同步网络编程
查看>>
NIO基于UDP协议的网络编程
查看>>