样式问题!条件再次条件== NULL

hel*_*hod 6 c coding-style

如果你调用某个函数,并且该函数在出现错误时返回NULL(想想malloc()或者fopen()例如),哪两个更好:

FILE *fp = fopen(argv[0], "r");

if (fp == NULL) {
    // handle error
}
Run Code Online (Sandbox Code Playgroud)

要么

if (!fp) {
    // handle error
}
Run Code Online (Sandbox Code Playgroud)

这只是风格问题吗?我认为第一个更明确更明确,但后来我很少在C :-)中编码.

Ebo*_*ike 7

我相信这是一种风格问题.就个人而言,我更喜欢第二种选择.其他人喜欢第一个,因为它更清晰,更"适当".有些人甚至写作,if (NULL == fp)所以他们永远不会忘记忘记一个=并把它变成一个任务.总而言之,我认为这是一个品味问题,而且可能更为重要的是要保持一致.

  • 我不喜欢尤达的条件.感觉就像是说"如果绿色是水,......".此外,无论如何,我的编译器让我完全无条件地分配. (6认同)

thk*_*ala 7

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

(P!)

或这个

(p == 0)

要求你一眼就知道p的类型是什么(一个整数?一个布尔?).我认为所有的编码都应该假设你必须在早上4点(早上4点钟,那里因为那里的不眠之夜)调试这个东西9个月后.在那种情况下,每一点点都有帮助.

哦,最好在测试相等性时将常量作为第一个操作数放置,这样如果你不小心将它转换为赋值,编译器就会中止错误.

  • 我不喜欢颠倒的条件:我不是将null与某些东西进行比较; 我正在测试某些东西是否为空.它错了 - Yoda-like,per @dennycrane.另外,当你比较两个变量时它会崩溃......所以它是一个糟糕的拐杖. (6认同)
  • 这是我从未得到过的关于整个地方的事情 - 在LHS上不变的事情:如果我记得这样做,我不记得放两个`=`符号吗? (5认同)