我希望知道文件关闭后FILE指针会发生什么.它会是NULL吗?
基本上,我想在关闭文件之前检查文件是否已经关闭.
例如如下:
FILE *f;
if(f!=NULL)
{
fclose(f);
}
Run Code Online (Sandbox Code Playgroud)
我可以这样做,还是有其他方法可以解决这个问题?
cni*_*tar 10
由于参数是按值传递的,因此无法fclose将文件指针设置为NULL.既然fclose可能会破坏FILE你必须的
NULL在执行a之后手动设置文件指针fclose(如果在不同的函数中关闭它,则无法使用FILE **)Peter Norvig引用Auguste Comte(1798-1857):
"Nothing is destroyed until it is replaced"
Run Code Online (Sandbox Code Playgroud)
你可以使用宏:
#define fclose(fp) ((fp) ? fclose(fp) : 0, (fp) = 0)
Run Code Online (Sandbox Code Playgroud)
这解决了两个不同的和相反的问题:
该FILE *指针后NULL'd fclose,所以它不可能是
fclose'd两次.
此版本fclose 将接受NULL参数.许多常见版本 - fclose例如HPUX,SGI和CYGWIN中的版本 - 对NULL感到满意.奇怪的是FreeBSD启发的版本,例如Linux和Microsoft,都没有.
当然,宏引入了自己的问题:
它不会返回正确的错误值.但是如果你想看到这个,你可以用额外的括号禁用宏,如:if
((fclose)(fp) == EOF){ /* handle error... */ }
它没有函数语义,因为它多次使用它的参数.但很难想象这会导致问题.但你可以使用(fclose).或者命名FCLOSE,遵循惯例.
| 归档时间: |
|
| 查看次数: |
14221 次 |
| 最近记录: |