【发布时间】:2013-02-04 03:31:04
【问题描述】:
这是我相对简单的场景,我想知道是否可以为自己节省一个条件并稍微整理一下代码。它的生产代码是别人写的,我正在整理。它根本没有 fclose,所以我添加的只是条件 fclose() 行:
FILE *fp;
struct stat sb;
/* snipped code */
if (((fp = fopen (config_file, "r+")) == NULL) || (fstat (fileno (fp), &sb))) {
syslog (LOG_ERR, "Fault. Unable to read config file");
if (fp != NULL) {
fclose (fp);
}
return -1;
}
/* code carries on after this */
问题是,我真的需要在我的代码中包含if(fp != null) 吗?只做fclose(fp) 而不检查有什么影响?我阅读了 C89 标准,但我不清楚结果会是什么。
提前干杯
史蒂夫
【问题讨论】:
-
不,你不需要,因为
fp在那个时候保证为空。你忘记了之前的支票吗?if (((fp = fopen (config_file, "r+")) == NULL)。你的if语句没用,永远不会被输入 -
您可能打算将
||代替&&放在第一个if语句的条件中。 -
对不起,应该是 ||不是 &&