如何解决如何检查已经包含#include的文件
这确实是一个哲学问题。我真的可以使用上述类型的预处理程序语句。我相信,如果我已经在第一个程序文件中包含#file / header / etc,那么我不必在其他文件中包含相同的文件。
我查看了#ifdef和#ifndef语句,但是这些语句似乎更适合于常量而不是#includes(我认为这不起作用)。
我在C ++中见过类似的东西:
#include <cstdlib>
#include <iostream>
#include <string>
#ifndef HASH_H
#define HASH_H
但是,我不知道它是如何工作的,或者它是否在C语言中也有用。
解决方法
如何检查已经包含#include的文件
通过在文件中定义一个宏,然后在该定义之前检查该宏是否已经定义(如果已定义),然后删除标头的全部内容。示例:
// check if macro is defined
#ifndef SOME_UNIQUE_MACRO
// define the macro
#define SOME_UNIQUE_MACRO
// content of the header is included at most once
#endif
这个习惯用法称为包含保护。
如果所选宏由于翻译单元内的任何其他原因而被定义或未定义,则该策略将失败。名称冲突是预处理器宏的常见问题。因此,必须仔细考虑以确保名称唯一。
可以通过使用#pragma once
声明而不是宏定义来解决唯一性问题。这不是标准的C ++,但是所有主要的编译器都支持。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。