如果你调用某个函数,并且该函数在出现错误时返回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 :-)中编码.
我相信这是一种风格问题.就个人而言,我更喜欢第二种选择.其他人喜欢第一个,因为它更清晰,更"适当".有些人甚至写作,if (NULL == fp)所以他们永远不会忘记忘记一个=并把它变成一个任务.总而言之,我认为这是一个品味问题,而且可能更为重要的是要保持一致.
我更喜欢与NULL进行比较,因为它清楚地表明比较的两个操作数都应该是指针.这个
(P!)
或这个
(p == 0)
要求你一眼就知道p的类型是什么(一个整数?一个布尔?).我认为所有的编码都应该假设你必须在早上4点(早上4点钟,那里因为那里的不眠之夜)调试这个东西9个月后.在那种情况下,每一点点都有帮助.
哦,最好在测试相等性时将常量作为第一个操作数放置,这样如果你不小心将它转换为赋值,编译器就会中止错误.