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?
解决方法
在大多数实际实现中,它们是具有大约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> ;;任何明智的开发人员都可以使用足够好的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>时优化不寻常的情况是值得的.没有包括在内.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。