【发布时间】:2012-09-19 04:36:16
【问题描述】:
我想知道,使用 NULL 文件名调用 fopen 是否合法。如果是,它为我节省了 2 行代码。在我的 GNU/Linux 机器上它可以工作,但它必须是可移植的。我查看了 POSIX fopen,但它没有说明这个案例。是未定义的行为吗?
【问题讨论】:
-
节省 2 行代码做什么?你希望它做什么?
-
我有一个函数,如果它不能得到它,它可能会返回一些文件名,或者 null。我没有区别,文件名是否为空(无法获取),或者它指的是不存在或不可读的文件。
-
你没有有有多余的行,如果你想变得讨厌:
FILE *f; if(!filename || !(f = fopen(filename, "r"))) { return NULL; } -
没关系。如果允许我将 NULL 传递给 fopen,它将使我的代码更清晰。我是吗?
-
它不太可能是便携的。不要作恶。我在很多不同的 unix 上运行代码,我没有专门尝试过 fopen,但根据经验,当您将 NULL 传递给库函数时,总会有一个平台出现段错误。