代码之家  ›  专栏  ›  技术社区  ›  helpermethod

风格问题!条件agains条件==空

  •  6
  • helpermethod  · 技术社区  · 15 年前

    如果调用某个函数,而该函数在出现错误时返回空值(请考虑 malloc() fopen() 例如),哪一个更好:

    FILE *fp = fopen(argv[0], "r");
    
    if (fp == NULL) {
        // handle error
    }
    

    if (!fp) {
        // handle error
    }
    

    只是风格问题吗?我认为第一个更清楚更明确,但是我很少用C:-)编码。

    6 回复  |  直到 15 年前
        1
  •  7
  •   thkala jaxb    15 年前

    我更喜欢与空进行比较,因为它清楚地表明比较的两个操作数都应该是指针。这个

    (!p)

    或者这个

    (p=0)

    要求您知道P的类型(整数?一个布尔?)一目了然。我认为所有的编码都应该在9个月后的早上4点(也就是早上4点,对于外面的无眠者来说)进行调试。在这种情况下,每一点帮助。

    哦,在测试相等性时,最好将常量作为第一个操作数,这样,如果意外地将其转换为赋值,编译器将以错误中止。

        2
  •  7
  •   EboMike    15 年前

    我认为这是一个风格问题。就我个人而言,我更喜欢第二种选择。其他人喜欢第一个,因为它更清晰,更“合适”。有些人甚至写信 if (NULL == fp) 所以他们永远不会不小心忘记一个 = 把它变成作业。总的来说,我认为这是一个品味的问题,保持一致可能更重要。

        3
  •  3
  •   Cameron    15 年前

    在这种情况下,我更喜欢第一个,因为您要显式比较该值以查看它是否为空(正好是0)。

    第二个读起来好像 fp 是一个布尔值,而不是。

    就像说“这个指针无效吗?”vs“这个指针是假的吗?”

    哪个更易读 当然,这是一个意见问题。

        4
  •  2
  •   user82238    15 年前

    我更喜欢“==”,我认为读者必须少思考。这也是我讨厌typedef的原因。

        5
  •  1
  •   casablanca    15 年前

    只是风格问题吗?

    在C的例子中,这只是一个风格问题,因为两者都是正确的,但总的来说,我相信更多的人(包括我)更喜欢一个明确的比较( ptr == NULL )如以下所示:

    • C++ 0x介绍了一个 nullptr 关键字来强调它不仅仅是一个数字或布尔值。
    • Java强制显式比较 obj == null )不允许 !obj .
        6
  •  0
  •   Vovanium    15 年前

    是的,这是款式问题。 fp == NULL (哎呀,我写了 fp = NULL ……) 非常清楚和明确地表达了这一点,对于那些不熟悉所有C的曲折的人来说,这是很好的。严酷的 !fp 就像一个成语和双关语:“有 (!)在FP“兴”。蚂蚁它很短。为此我喜欢 !计划生育 . 我认为C设计师也喜欢这样,否则他们不应该定义 ! 用于指针。:)