c++库包含守卫



只是一个风格问题,或者甚至可能是一个我没有意识到的弊端。

我目前正在编写我的第一个软件,它将由我以外的人使用和审查。当我编写代码并调用头文件时,在多个文件中多次调用相同的头文件是不好的做法吗?

例如

exampleClass.h

#ifndef BUG_H
#define BUG_H
#include<string>
class Bug{
private:
    int bug_id; //6 digit int
    Date creation_ts; //Date object containing time of creation
    std::string short_desc; //Short description of bug
    std::string classification; //Catagory of bug_id
    std::string product; //What product is the bug regarding
    std::string component
}
#endif

anotherExample.h

#ifndef ANOTHEREXAMPLE_H
#define ANOTHEREXAMPLE_H
#include<string>
class Pug{
private:
    int bug_id; //6 digit int
    Date creation_ts; //Date object containing time of creation
    std::string short_desc; //Short description of bug
    std::string classification; //Catagory of bug_id
    std::string product; //What product is the bug regarding
    std::string component
}
#endif

是否有任何错误包括字符串两次在两个不同的头文件,如果两者都有依赖关系?这会在软件生命周期的后期导致错误吗?

如果这两个文件不相关,例如不包含在同一源文件中,那么您别无选择。否则,这并不重要,因为<string>无论如何都会被包括在内,如果您一个接一个地包含另一个文件。其中一个文件还需要它。但是,如果一个文件需要一个文件,总是包含它。总是存在这样的风险:有人可能会忘记包含另一个文件,代码将无法编译。不要冒险,要相信客户。

此外,std::string也有包含守卫,因此无需担心多重包含。此外,为了包含的安全性,您可以对标题执行以下操作:

#pragma once
#ifndef HEADER_H
#define HEADER_H
//.....Code
#endif

你可以总是#pragma#define,(如在1或其他),但把这两个保证头警卫,因为旧的编译器不支持#pragma once

是否有任何错误包括字符串两次在两个不同的头文件,如果两者都有依赖关系?这会在软件生命周期的后期导致错误吗?

。实际上,应该包含您实际依赖的每个头文件。您不应该依赖于包含您的依赖项的其他头文件。未能包含所需的所有标头会导致错误。如果你的类需要std::string,它应该包括<string>。时期。

所有头文件都应该包含保护符(无论是#ifndef还是#pragma once)。当然,标准库实现中的函数可以。所以extra include的缺点只是额外的预处理时间,好处是可以保证编译代码。

你必须包括string,如果你在你的类使用它。因为string也可以防止多个包含,所以它是好的。

顺便说一句,有一个比ifdef更好的方法来避免多个包含:

#pragma once

相关内容

  • 没有找到相关文章

最新更新