c++ - 捕获未分配的 r 值的编译器选项

标签 c++ gcc return-value compiler-warnings

相当尴尬的是,我写了类似下面的东西(经过 sanitizer ):

vector_item next()
{
    if (this->it == this->myVector.end()){
        this->it == this->myVector.begin();
    }
    return *(this->it++);
}

明显的错误非常明显。然而,它确实花了很短的时间来追踪。

没有为此生成编译器警告,但应该生成一个吗?这里创建了一个未使用的 r 值(不是说,一个未使用的函数返回值,因为它的副作用而被调用),在我看来这表明代码有问题。

使用 g++ -Wall -Wextra 编译。 (海合会 4.8.3)

我知道 -Wunused-result 但这里不适用。

最佳答案

No compiler warnings were generated for this, but should one have been?

我想不出我在标准中读到的任何内容需要在此处发出警告。

但是,clang 开发团队似乎认为有必要这样做:

18 : <source>:18:18: warning: equality comparison result unused [-Wunused-comparison]
        this->it == this->myVector.begin();
        ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
18 : <source>:18:18: note: use '=' to turn this equality comparison into an assignment
        this->it == this->myVector.begin();
                 ^~
                 =
1 warning generated.

我的第一个想法是这是 gcc 中的 QoI 问题。可能值得将其作为一个问题提出。

我很幸运,因为我们的软件是为 mac (clang)、linux (gcc) 和 windows (msvc) 编译的,因此可以及早发现违反标准的情况和边缘情况。

在一次又一次地寻找错误之前,在另一个编译器上重新编译您的代码可能是个好主意 - 它对我有帮助。

关于c++ - 捕获未分配的 r 值的编译器选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45834597/

相关文章:

c++ - 使用 scanf 在 C++ 中读取字符串

c++ - 使用我自己的 list.sort() 逻辑,试图模拟其他来源,为什么我会收到看似正确格式的错误?

c++ - 游戏编程

c - 使用 gcc 在 C 中有多个 __attribute__

rust - 如何从函数返回具有 String 类型字段的结构 Vec?

C++多态性和具体方法

c - 在 GCC 中实现编译时只读函数指针表

c++ - 使用 NVCC 对 `name' 的 undefined reference

c++ - 函数返回初始化的构造函数

java - 将 if 语句放入应该返回 int 值的方法中