加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何检测是否包含stdio.h?

发布时间:2020-12-16 07:11:12 所属栏目:百科 来源:网络整理
导读:我有一个头文件foo.h文件,声明了一个函数原型 void foo(FILE *f); /* ... Other things that don't depend on FILE ... */ 除其他事项外. 很明显,要使用此标头,我需要执行以下操作 #include stdio.h#include "foo.h" 我想用以下内容包围这个特定的原型: #if
我有一个头文件foo.h文件,声明了一个函数原型

void foo(FILE *f); 

/* ... Other things that don't depend on FILE ... */

除其他事项外.

很明显,要使用此标头,我需要执行以下操作

#include <stdio.h>
#include "foo.h"

我想用以下内容包围这个特定的原型:

#ifdef _STDIO_H
void foo(FILE *f);
#endif

/* ... Other things that don't depend on FILE ... */

所以我可以#include“foo.h”而不用担心#include< stdio.h>在我不需要那个特定功能的情况下.

如果我希望我的代码可移植且符合标准,#ifdef _STDIO_H是否可行?

我在标准文档中没有提到_STDIO_H,但我发现它在各种C库中使用.我是否应该使用我知道在stdio.h中定义的东西,比如EOF?

一个相关的问题:你如何处理其他标准C头文件,比如stdlib.h?

解决方法

< stdio.h中>和< stdlib.h>是C99(和C11)标准的一部分.因此,每个(托管的)符合标准的C实现都有它们.

在大多数实际实现中,它们是具有大约include guards的头文件.

符合标准的实现可能会处理#include< stdio.h>非常具体地,例如通过使用一些数据库.我不知道这样的实施.

所以简单地添加

#include <stdio.h>

靠近头文件的顶部,类似于

// file foo.h
#ifndef FOO_INCLUDED
#define FOO_INCLUDED
#include <stdio.h>
// other includes ...
// ...
// other stuff
#endif /* FOO_INCLUDED */

或者,您无需关心并记录#include“foo.h”需要先前的#include< stdio.h&gt ;;任何明智的开发人员都可以使用足够好的C实现来处理这个问题. 实际上,我在Alter Mann’s deleted answer的评论中错了.它看起来像stdin is required to be some macro,然后你可能会使用#ifdef stdin … endif,因为Alter Mann正确回答.我相信它不是非常易读,你只想拥有< stdio.h>包括在内,或者将它自己包含在你的foo.h中,或者在你的文档中要求它.

与C标准头相反,C标准头在实践中很快被编译,所以我不认为在< stdio.h>时优化不寻常的情况是值得的.没有包括在内.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读