header-files 相关问题

头文件在某些​​编程语言中用于将源代码保存为可在多个源文件中重用的单个副本。此标记应用于有关使用头文件的问题。编程语言的标记(如C,C ++,PHP或Ruby)应与此标记一起使用,因为头文件的使用可能因编程语言而异。此标记通常不与Java或Go编程和import指令一起使用。

#pragma 曾经是 C++11 标准的一部分吗?

传统上,避免 C++ 中包含多个标头的标准且可移植的方法是使用 #ifndef - #define - #endifpre-compiler 指令方案,也称为宏保护方案(请参阅

回答 2 投票 0

C++ 头文件如何保存 cpp 各自的文件定义(如果它们本身不包含它们)?

我知道cpp库包含: 这 .h 文件(头文件),其中函数、变量和类的成员声明和 cpp 文件,其中包含变量、函数和

回答 1 投票 0

vscode intellisense 找不到 cmake 项目中包含的头文件

我有一个 cmake 项目,其中包含: 名为 Project1 的静态库 名为 Project2 的静态库依赖于 Project1 名为 Project3 的可执行文件依赖于这两个库 一切...

回答 3 投票 0

为什么 CMake 生成的 make clean 不删除使用configure_file创建的文件

我正在为一个项目使用CMake,并使用configure_file()命令生成一些配置.h文件。这工作得很好,但是 - 如果我清理,生成的文件不会被删除 - 也不会

回答 1 投票 0

“对‘A::A(int,int)’的未定义引用:从包含的标头创建类的对象时

我正在尝试使用另一个文件中的对象,但尽管包含了适当的头文件,但我仍然收到未定义的引用错误。我在 Li 上使用带有 C++ CDT 插件的 Eclipse...

回答 3 投票 0

将 clang++ 与 C++23 和 gcc 候选 12 一起使用无法找到预期的标头

我想使用 C++23 的 ,但是 clang 无法在我的系统上找到它,除非我添加 -stdlib=libc++,这会导致针对 libstdc++ 编译的各种共享库出现其他错误。 ...

回答 1 投票 0

在标头中初始化大地图会导致 g++ 崩溃

我正在尝试制作一个简单的工具,需要对固定键值数据集进行一些查找,因此我尝试将所有数据惰性地扔到头文件中的哈希映射中: /** 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,还可以节省一些编译成本。

回答 1 投票 0

在头文件中初始化大地图会导致g++编译失败

我正在尝试制作一个简单的工具,需要对固定键值数据集进行一些查找,因此我尝试将所有数据惰性地扔到头文件中的哈希映射中: /** 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,还可以节省一些编译成本。

回答 1 投票 0

为什么要先包含相应的标头?

关于C/C++包含头文件顺序的问题,最佳答案建议先包含相应的头文件。 Google 和 Mozilla 风格指南也是如此。 然而,在这两种情况下,我都无法...

回答 2 投票 0

检查标题是否包含他们使用的内容

是否有工具可以解析 C++ 项目并决定 头文件是否包含它们使用的内容: 即,如果文件 Foo.cc(或 Foo.h)提到某个 Bar 类(例如向量),那么 它本身包括...

回答 4 投票 0

为什么 net/if.h 在 ifaddrs.h 之前?

Apple 的 getifaddrs 手册页在“BUGS”下说, 如果同时包含 和 ,则 必须包含在 之前。 为什么是...

回答 1 投票 0

如何在PHP中搜索根目录下的图片?

我想从主题文件夹内的public_html文件夹中调用图像。 原始PHP文件位于以下目录中 public_html/wp-content/themes/主题名称/includes/headers/header.php

回答 1 投票 0

为什么VScode显示SDL.h:没有这样的文件或目录

我的工作区中有 SDL“include”文件夹,在输入代码时,Visual Studio 似乎识别出该文件存在。但每当我尝试运行它时,我都会收到此错误: 输入

回答 1 投票 0

有关结构体重新定义和函数类型冲突的错误

我有一个给定的头文件(given1.h),其中包括我的函数原型、定义、结构定义和库。我想添加一个名为 helper.h 的帮助程序文件,其中包含一个函数

回答 1 投票 0

如何在 Visual Studio Code 中创建 C++ 头文件?

我有一个包含 3 个文件的程序,当我通过 Code Runner 运行该程序时,它不断打印错误。“Log.hpp”文件的图标是 C,而不是 C++。我将其重命名为 Log.h 或

回答 3 投票 0

如果找不到头文件,在 C 中产生自定义错误

有没有办法让 C 代码在找不到头文件时显示自定义错误?我觉得这对于尝试在 Linux 上编译 Windows 代码特别有用。例如,而不是“风...

回答 1 投票 0

切换 range-v3 的包含标头顺序后编译失败

当我在range-v3 v0.12.0中一起使用views::set_intersection和views::transform时,标题range/v3/view/set_algorithm.hpp和range/v3/view/transform.hpp的顺序很重要。如果是前者

回答 1 投票 0

忽略由第 3 方标头引起的 [clang-diagnostic-error] clang-tidy

我在开发中使用 clang-tidy 作为“linter”工具。我开始将第 3 方软件集成到我的代码中,当我使用以下方法包含它们的头文件时: -I/路径/到/包含 大量错误是

回答 3 投票 0

什么是 .c.h 文件?

在查看 CPython 源代码时,我发现了一个名为 listobject.c.h 的文件。我不确定这个文件扩展名“.c.h”是什么。该文件混合了函数原型和乐趣......

回答 1 投票 0

无法定义依赖于 C 中不同头文件中的另一个变量的常量变量

我有一组正在尝试编译的 C 文件 //表.c #include“行.h” 常量 uint32_t ROW_SIZE_1 = 50; //一些随机数 常量 uint32_t PAGE_SIZE = 4096; 常量 uint32_t ROWS_PE...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.