【发布时间】:2018-01-24 21:09:52
【问题描述】:
当尝试打印第一个命令行参数时:
std::cout << argv[0] << std::endl;
clang-tidy 给出警告:
警告:'不要使用指针运算' 来自 [cppcoreguidelines-pro-bounds-pointer-arithmetic]
是否有另一种方法可以在不使用指针运算的情况下使用argv 的值?是不是通过任何明智的方法访问char** 都必须使用指针算法?
我很欣赏有一些专门的函数来处理命令行参数,但它们似乎过于繁重,无法简单地打印一个参数。
我正在使用c++ 编写代码,使用clang 编译器并使用cmake 构建。
【问题讨论】:
-
如果只需要
argv[0],可以使用*argv。但除此之外,没有。 -
@spectras 从来不是一个数组。函数参数不能是数组。
-
这只是实施核心指南失控了。更好的实现应该能够识别
main的特殊情况,并且在这种情况下不再为指针算术而烦恼。 -
@hvd 准则应该对
main例外。这是一个众所周知的界面,不会改变,那么为什么要用这个警告来打扰开发人员呢? -
@SergeyA 正如我在回答中指出的那样,可以在不以本指南支持的方式更改界面的情况下读取命令行参数。但我确实认为,如果他们至少解决它会很好。无论是通过例外处理还是展示如何在不违反准则的情况下实施例外,对我来说都没有太大关系。
标签: c++ command-line-arguments clang++ pointer-arithmetic clang-static-analyzer