为什么C ++中无用的条件返回没有警告?

时间:2017-05-15 11:04:03

标签: c++ function if-statement return compiler-warnings

我有以下代码示例:

$(function () {
    $(".delete").click(function () {
        var element = $(this);
        var del_id = element.attr("id");
        var info = 'id=' + del_id;
        if (confirm(info)) {
            $.ajax({
                type: "POST",
                url: "delete_labor.php",
                data: info,
                success: function () {}
            });

            $(this).closest("tr").remove();
        }
        return false;
    });
});

Afaik最后void some_function() { int ret = do_something(); if(ret == SOME_ERROR) return; } 无用,因为无论if有什么值,函数都会返回。我期待编译器发出警告或至少一个信息(我使用GCC 6)。我还尝试启用this thread的所有警告,但仍然没有。使用ret语句返回并在void函数结束时返回之间是否有任何区别,或者它是否仍然得到优化(但我仍然认为警告会有用)?

3 个答案:

答案 0 :(得分:2)

编译器警告应保持误报和漏报之间的平衡。

太多警告 - 你会花费大量时间在没有任何实际改进的情况下走过它们(或者更现实地说,你会完全禁用它们)。

很难想象这样一种警告会显示代码真正存在问题的情况,而不仅仅是一个小问题。

例如,考虑-Wunused。通常表示您拼错了某个变量名称,或忘记了this

float x = ...;
float y = ...;

return atan2(y, y);
//x is never used, probably an error

您的示例可能是静态分析工具的诊断,但是太小而无法用作常规编译器警告。

答案 1 :(得分:0)

  

void函数可以完美地返回。

这就是为什么你没有看到错误/警告。从我的answer开始,即使我使用了一些有用的标志,我也什么也得不到:

Georgioss-MacBook-Pro:~ gsamaras$ g++ -pedantic -Wall -Wextra -Wconversion main.cpp 
Georgioss-MacBook-Pro:~ gsamaras$ 

如果要终止该功能,则需要执行此操作,但根本不需要返回任何内容。

尝试return 5;,当然会收到错误。

答案 2 :(得分:0)

您已编写完全合法的代码。 所以编译器没有错误。

!如果!你启用优化它将被优化掉。 你可以在这里看到它: https://godbolt.org/g/pUr7eP

也许这会被一些静态分析器标记出来。