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

你可能感兴趣的文章
NVelocity标签设置缓存的解决方案
查看>>
Nvidia Cudatoolkit 与 Conda Cudatoolkit
查看>>
NVIDIA GPU 的状态信息输出,由 `nvidia-smi` 命令生成
查看>>
nvidia 各种卡
查看>>
Nvidia 系列显卡大解析 B100、A40、A100、A800、H100、H800、V100 该如何选择,各自的配置详细与架构详细介绍,分别运用于哪些项目场景
查看>>
NVIDIA-cuda-cudnn下载地址
查看>>
nvidia-htop 使用教程
查看>>
nvidia-smi 参数详解
查看>>
Nvidia驱动失效,采用官方的方法重装更快
查看>>
nvmw安装node-v4.0.0之后版本的临时解决办法
查看>>
nvm切换node版本
查看>>
nvm安装 出现 Error retrieving “http://xxxx/SHASUMS256.txt“: HTTP Status 404 解决方法
查看>>
nvm安装以后,node -v npm 等命令提示不是内部或外部命令 node多版本控制管理 node多版本随意切换
查看>>
NXLog采集windows日志配置conf文件
查看>>
ny540 奇怪的排序 简单题
查看>>
NYOJ -216 A problem is easy
查看>>
NYOJ 1066 CO-PRIME(数论)
查看>>
NYOJ 737:石子合并(一)(区间dp)
查看>>
nyoj 91 阶乘之和(贪心)
查看>>
nyoj------203三国志
查看>>