Bool 永远不会为 NULL [-Waddress]

awe*_*ata 3 c++ linux gcc compiler-warnings suppress-warnings

我从 C++ 开始并收到此警告:

\n

../src/loop.cpp:23:6:警告:\xe2\x80\x98bool的地址almostComparison(double, double)\xe2\x80\x99永远不会是NULL [-Waddress]

\n

任何人都可以向我解释为什么会这样吗?如果意图只是比较返回 true 或 false?

\n

我一直在研究其他问题,但答案太先进了,我无法理解发生了什么。谢谢你帮助我:)

\n
#include <iostream>\n\nusing namespace std;\n\nbool almostComparison(double number1, double number2) {\n    if (number1 + 1 == number2 || number2 + 1 == number1) {\n        return true;\n    }\n    return false;\n}\n\nvoid numberComparison(double number1, double number2) {\n    if(number1 < number2) {\n        cout << "the smaller value is: " << number1 << '\\n';\n        cout << "the larger value is: " << number2 << '\\n';\n        if(almostComparison) {\n            cout << "the numbers are almost equal!" << '\\n';\n        }\n    } else if (number2 < number1) {\n        cout << "the smaller value is: " << number2 << '\\n';\n        cout << "the larger value is: " << number1 << '\\n';\n    } else {\n        cout << "the numbers are equal" << '\\n';\n        cout << "Number1: " << number1 << '\\n';\n        cout << "Number2: " << number2 << '\\n';\n    }\n}\n\nint main() {\n\n    bool condition = true;\n    double number1 = 0;\n    double number2 = 0;\n\n    while(condition) {\n        cin >> number1;\n        cin >> number2;\n\n        if(cin.fail()) {\n            condition = false;\n        } else {\n\n            numberComparison(number1, number2);\n\n        }\n    }\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Ken*_*Y-N 7

if(almostComparison) {
Run Code Online (Sandbox Code Playgroud)

这会测试函数的地址,该地址始终为非 NULL。你想像这样实际调用该函数:

if(almostComparison(number1, number2)) {
Run Code Online (Sandbox Code Playgroud)

  • @awesomepandata:我不会说它“正常”工作,因为它总是说“数字几乎相等!” 每当“number1”小于“number2”时,即使您为这两个数字输入了 1 和 700 之类的值。至于编译,这就是为什么编译器警告是一件事——如果你得到一个编译器*错误*,通常只是一些拼写错误,而如果你得到一个“警告”,你通常处于一个非常危险的情况,你的程序可能会出现工作,但有时会给出错误的答案。 (2认同)