首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NULL是一个有效的文件吗?

NULL是一个有效的文件吗?
EN

Stack Overflow用户
提问于 2020-09-27 04:03:46
回答 2查看 267关注 0票数 3

我想要一个类似于

代码语言:javascript
复制
/*In header*/
void foo(FILE *outpt=stdout);

/*In implementation*/
void foo(FILE *outpt)
{
    if(outpt) fprintf(outpt, "Hello!");
}

但是如果NULL==stdout的话,这段代码(很明显)就坏了。(编辑: Jonathan指出这段代码已经坏了,因为C没有默认参数。我的C++正在展示,但这个想法依然存在。)

C指定stdinstdoutstderr是实现定义的FILE*常量,但我找不到指示这些常量不是NULL的引用。而且,我找不到任何暗示NULL可能不是一个有效的打开文件的东西!

在MSVS中,fprintf(NULL, "Hello!")调用abort(),这表明NULL确实是一个无效的FILE*规范。

在这方面,C++似乎遵循了C。我最终是一个C++程序员,但我将接受一个C答案,因为它可能会转移到C++,以实现向后兼容性。因此:NULL做C或C++规范(包括C2x和C++20),以保证是无效的

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-27 04:34:53

C11 7.21.1/3描述了标准文件句柄:

宏是…。 stderr stdin stdout 它们是“指向FILE的指针”类型的表达式,它们分别指向与标准错误、输入和输出流相关联的FILE对象。

如果这些对象的值为null,则它们不会指向任何这样的对象。

票数 4
EN

Stack Overflow用户

发布于 2020-09-27 04:10:20

NULL不是有效的文件*!由于stdout和stdin与任何其他流一样,下面应用…

https://man7.org/linux/man-pages/man3/fopen.3.html

成功完成后返回值-- fopen()、fdopen()和freopen() --返回一个文件指针。否则,返回NULL,并将errno设置为指示错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64084675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档