gpt4 book ai didi

c++ - 有 C++ 标准库 ifdef 或 ifndef 预处理器指令吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:12:18 24 4
gpt4 key购买 nike

我正在用 C++ 构建我自己的终端应用程序项目,我在问自己标准库是否有 ifdef 或 ifndef 预处理器指令。我想知道,因为我需要创建不同的头文件,这些头文件需要一些标准库头文件,例如“字符串”和其他一些头文件,所以我不想包含同一个库 3 次或更多次,因为它会使程序更重。< br/>例如,我在我的头文件中写了这样的内容,以防止 .h 文件被多次包含:

#ifndef myheader_h
#define myheader_h
// my file code here
#endif

我尝试编译,但编译器没有告诉我任何关于错误或警告的信息。
我还尝试阅读标准库源代码 ( https://en.cppreference.com/w/cpp/header ),但我没有找到任何预处理器规则,如 ifdef 或 ifndef。
我应该像这样包含标准库 header 吗?

#ifndef string_h
#define string_h
#include <string>
#endif

我希望我的问题还没有被问到,因为我在搜索时没有找到它。

更新

有些人说“你不需要担心”,还有人说“如果有合适的 include guards,成本非常低”,我的意思是:程序的重量很重要,我想让它更轻,所以我不想多次完全包含同一个文件。 std lib 文件是否正确包含 guard ? (我的头文件有它们,不知道标准库文件)

最佳答案

没有要求标准头文件到#define任何特定的预处理器符号以确保它们可以是 #include d 多次。

话虽如此,任何理智的实现都会确保它们可以是 #include d 多次而不会对应用程序代码产生不利影响。

事实证明,这是大多数 header 的标准要求(谢谢,@Rakete1111)。

来自C++ standard

A translation unit may include library headers in any order ([lex]). Each may be included more than once, with no effect different from being included exactly once, except that the effect of including either <cassert> or <assert.h> depends each time on the lexically current definition of NDEBUG.

不仅如此,他们很可能正在使用 #pragma once指示。因此,即使您使用 #include对于同一个 header 多次,它们将只被读取一次。

总而言之,不用担心标准头文件。如果您的头文件实现正确,您的应用程序就会很好。

关于c++ - 有 C++ 标准库 ifdef 或 ifndef 预处理器指令吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51828147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com