头文件在某些编程语言中用于将源代码保存为可在多个源文件中重用的单个副本。此标记应用于有关使用头文件的问题。编程语言的标记(如C,C ++,PHP或Ruby)应与此标记一起使用,因为头文件的使用可能因编程语言而异。此标记通常不与Java或Go编程和import指令一起使用。
传统上,避免 C++ 中包含多个标头的标准且可移植的方法是使用 #ifndef - #define - #endifpre-compiler 指令方案,也称为宏保护方案(请参阅
C++ 头文件如何保存 cpp 各自的文件定义(如果它们本身不包含它们)?
我知道cpp库包含: 这 .h 文件(头文件),其中函数、变量和类的成员声明和 cpp 文件,其中包含变量、函数和
vscode intellisense 找不到 cmake 项目中包含的头文件
我有一个 cmake 项目,其中包含: 名为 Project1 的静态库 名为 Project2 的静态库依赖于 Project1 名为 Project3 的可执行文件依赖于这两个库 一切...
为什么 CMake 生成的 make clean 不删除使用configure_file创建的文件
我正在为一个项目使用CMake,并使用configure_file()命令生成一些配置.h文件。这工作得很好,但是 - 如果我清理,生成的文件不会被删除 - 也不会
“对‘A::A(int,int)’的未定义引用:从包含的标头创建类的对象时
我正在尝试使用另一个文件中的对象,但尽管包含了适当的头文件,但我仍然收到未定义的引用错误。我在 Li 上使用带有 C++ CDT 插件的 Eclipse...
将 clang++ 与 C++23 和 gcc 候选 12 一起使用无法找到预期的标头
我想使用 C++23 的 ,但是 clang 无法在我的系统上找到它,除非我添加 -stdlib=libc++,这会导致针对 libstdc++ 编译的各种共享库出现其他错误。 ...
我正在尝试制作一个简单的工具,需要对固定键值数据集进行一些查找,因此我尝试将所有数据惰性地扔到头文件中的哈希映射中: /** main.h */ #包括 我正在尝试制作一个简单的工具,需要对固定键值数据集进行一些查找,因此我尝试将所有数据惰性地扔到头文件中的哈希映射中: /** main.h */ #include <unordered_map> #include <cstdint> using namespace std; const unordered_map<uint64_t, const char * const> test = { {0xDEADC0DE, "Some short text less than 50 characters"}, // 46K rows of data }; 我还没有实现任何东西,但仅仅包含这个头文件就足以使编译器崩溃。 主.cpp /** main.cpp */ #include <iostream> #include "main.h" int main() { return 0; } 在 CPU 核心达到最大负载 5 分钟后,g++ (cc1plus) 耗尽了所有 32GB RAM 并崩溃。我知道大标头可能会影响编译性能,但我没想到它会耗尽资源并失败。当头文件大小只有 1.9 MB 时,它如何使用 32GB RAM?有人可以帮我解释一下我的案例中的问题吗? 我使用的版本是 g++ (GCC) 13.2.1 20230801,使用命令 /usr/bin/g++ -O3 -DNDEBUG -o CMakeFiles/main.cpp.o -c /home/foo/main.cpp 更新 我还用不同尺寸的地图做了一些实验: 元素编号 构建时间 10 00:00:01.043 100 00:00:01.187 1000 00:00:05.225 2000 00:00:10.200 5000 00:00:25.604 10000 00:00:52.208 20000 00:01:48.090 大的头文件会降低你的性能。不要欺负你的编译器! 想象一下 includeing <main.h> — 正如您所说,每个需要它的源文件中都有超过 四万六千 (46000 + 1) 个元素。这意味着您在包含它的任何地方都复制了大对象test,并且您的编译器被迫预处理标头并在包含它的任何地方进行编译。这不好!真的很糟糕!! 就像我在评论中提到的那样,这个对象test应该位于翻译单元中,应该具有静态存储持续时间并且应该具有外部链接。这样一来,它将被编译一次,直到程序终止为止,并且可以通过使用 extern 关键字引用它来在其他翻译单元中使用。 test.cpp #include <unordered_map> #include <cstdint> const std::unordered_map<uint64_t, const char* const> test { {0xDEADC0DE, "Some short text less than 50 characters"}, /* 46K rows of data */ }; main.cpp #include <iostream> #include <unordered_map> #include <cstdint> extern const std::unordered_map<uint64_t, const char* const> test; int main() { std::cout << test[0xDEADC0DE] << '\n'; return 0; }; 任何您想使用 test 的地方,只需声明它 extern 即可引用静态存储中的同一个对象。这样,你就可以避免复制test,还可以节省一些编译成本。
我正在尝试制作一个简单的工具,需要对固定键值数据集进行一些查找,因此我尝试将所有数据惰性地扔到头文件中的哈希映射中: /** main.h */ #包括 我正在尝试制作一个简单的工具,需要对固定键值数据集进行一些查找,因此我尝试将所有数据惰性地扔到头文件中的哈希映射中: /** main.h */ #include <unordered_map> #include <cstdint> using namespace std; const unordered_map<uint64_t, const char * const> test = { {0xDEADC0DE, "Some short text less than 50 characters"}, // 46K rows of data }; 我还没有实现任何东西,但仅仅包含这个头文件就足以使编译器崩溃。 主.cpp /** main.cpp */ #include <iostream> #include "main.h" int main() { return 0; } 在 CPU 核心达到最大负载 5 分钟后,g++ (cc1plus) 耗尽了所有 32GB RAM 并崩溃。我知道大标头可能会影响编译性能,但我没想到它会耗尽资源并失败。当头文件大小只有 1.9 MB 时,它如何使用 32GB RAM?有人可以帮我解释一下我的案例中的问题吗? 我使用的版本是g++ (GCC) 13.2.1 20230801,使用命令/usr/bin/g++ -O3 -DNDEBUG -o CMakeFiles/main.cpp.o -c /home/foo/main.cpp 大的头文件会降低你的性能。不要欺负你的编译器! 想象一下 includeing <main.h> — 正如您所说,每个需要它的源文件中都有超过 四万六千 (46000 + 1) 个元素。这意味着您在包含它的任何地方都复制了大对象test,并且您的编译器被迫预处理标头并在包含它的任何地方进行编译。这不好!真的很糟糕!! 就像我在评论中提到的那样,这个对象test应该位于翻译单元中,应该具有静态存储持续时间并且应该具有外部链接。这样一来,它将被编译一次,直到程序终止为止,并且可以通过使用 extern 关键字引用它来在其他翻译单元中使用。 test.cpp #include <unordered_map> #include <cstdint> const std::unordered_map<uint64_t, const char* const> test { {0xDEADC0DE, "Some short text less than 50 characters"}, /* 46K rows of data */ }; main.cpp #include <iostream> #include <unordered_map> #include <cstdint> extern const std::unordered_map<uint64_t, const char* const> test; int main() { std::cout << test[0xDEADC0DE] << '\n'; return 0; }; 任何您想使用 test 的地方,只需声明它 extern 即可引用静态存储中的同一个对象。这样,你就可以避免复制test,还可以节省一些编译成本。
关于C/C++包含头文件顺序的问题,最佳答案建议先包含相应的头文件。 Google 和 Mozilla 风格指南也是如此。 然而,在这两种情况下,我都无法...
是否有工具可以解析 C++ 项目并决定 头文件是否包含它们使用的内容: 即,如果文件 Foo.cc(或 Foo.h)提到某个 Bar 类(例如向量),那么 它本身包括...
Apple 的 getifaddrs 手册页在“BUGS”下说, 如果同时包含 和 ,则 必须包含在 之前。 为什么是...
我想从主题文件夹内的public_html文件夹中调用图像。 原始PHP文件位于以下目录中 public_html/wp-content/themes/主题名称/includes/headers/header.php
我的工作区中有 SDL“include”文件夹,在输入代码时,Visual Studio 似乎识别出该文件存在。但每当我尝试运行它时,我都会收到此错误: 输入
我有一个给定的头文件(given1.h),其中包括我的函数原型、定义、结构定义和库。我想添加一个名为 helper.h 的帮助程序文件,其中包含一个函数
如何在 Visual Studio Code 中创建 C++ 头文件?
我有一个包含 3 个文件的程序,当我通过 Code Runner 运行该程序时,它不断打印错误。“Log.hpp”文件的图标是 C,而不是 C++。我将其重命名为 Log.h 或
有没有办法让 C 代码在找不到头文件时显示自定义错误?我觉得这对于尝试在 Linux 上编译 Windows 代码特别有用。例如,而不是“风...
当我在range-v3 v0.12.0中一起使用views::set_intersection和views::transform时,标题range/v3/view/set_algorithm.hpp和range/v3/view/transform.hpp的顺序很重要。如果是前者
忽略由第 3 方标头引起的 [clang-diagnostic-error] clang-tidy
我在开发中使用 clang-tidy 作为“linter”工具。我开始将第 3 方软件集成到我的代码中,当我使用以下方法包含它们的头文件时: -I/路径/到/包含 大量错误是
在查看 CPython 源代码时,我发现了一个名为 listobject.c.h 的文件。我不确定这个文件扩展名“.c.h”是什么。该文件混合了函数原型和乐趣......
我有一组正在尝试编译的 C 文件 //表.c #include“行.h” 常量 uint32_t ROW_SIZE_1 = 50; //一些随机数 常量 uint32_t PAGE_SIZE = 4096; 常量 uint32_t ROWS_PE...