我确信翻译单元是一个.cpp文件(或者,为了避免引用扩展名,一个文件,你将提供给 `g++ -c theTranslationUnit.cpp -o 不管什么。o)一旦你将宏替换为它,复制并粘贴#include (递归),并删除评论。 换句话说,我认为它是“获取 C++ 文件并处理所有#并删除其中 ...
我确信翻译单元是一个.cpp文件(或者,为了避免引用扩展名,一个文件,你将提供给 `g++ -c theTranslationUnit.cpp -o 不管什么。o)一旦你将宏替换为它,复制并粘贴#include (递归),并删除评论。 换句话说,我认为它是“获取 C++ 文件并处理所有#并删除其中 ...
考虑具有以下内容的foo.cpp文件#include "foo.hpp" int foo() { return 7; } 及其关联的 header#pragma once int foo(); 显然需要后者来了解以下main function 的存在foo :#include < ...
比方说: 一些 header h.hpp在其模板参数上使用sizeof定义了一个模板 function f() 。 两个不同的 C++ 源文件a.cpp和b.cpp定义了它们自己的同名结构S 。 a.cpp和b.cpp都使用f()和它们自己的S 。 换句话说: h.hpp : a.cpp : ...
我知道#inclusion 通常被描述为文本复制粘贴预处理器指令。 现在,如果 header 被 #include 保护或 #pragma 一次,那么我们如何描述经过第一个翻译单元到 #include 所说的 header 之后实际发生的事情? ...
具有多个源文件 (.cpp) 的模块是否具有一个或多个翻译单元? 我的理解是每个单独的源文件(.cpp)都将是它自己的翻译单元,除非它被包含在内,并且#pragma onced(我猜这是一种弊端),但我不知道这是如何在模块化程序中完成的. 如果有什么不同,那我对Visual Studio C++开 ...
据我所知,翻译单元由单个实现 file.cpp/.c 及其所有包含的标头代码组成。 当在另一个.cpp 文件中包含 a.cpp 文件,或在另一个.cpp 文件中包含的 ah 文件中包含 a.cpp 文件时,我们这里的翻译单元是什么? ...
In C is it recurrent to have .c files including other internal .c files with static variables / functions in a copy / paste manner? 就像.c文件一样,它由许多.c文件 ...
我需要禁用某个 header 文件中的所有警告,并且仅禁用该文件。 我的编译器版本是g++-4.8 。 我必须使用那个编译器。 我查看了该编译器的文档: g++-4.8 documentation support for System-Headers 这个已经写完了: 当 GCC 正在处理系统 h ...
我总是这样安排我的 C++ 头文件和源文件: 程序.h 程序.cpp 主文件 但我最近发现以其他方式排列它们很常见: 程序.h 程序.cpp 主文件 我发现第一种方法更方便,那么有什么理由让我更喜欢第二种方法而不是第一种方法? ...
给定一个类模板,编译需要很长时间。 在开发和调试期间,我想通过将成员函数的定义分离到单独的翻译单元来减少编译时间。 只是为了完全专业化(这也是为了减少编译时间)。 是否可以在 C++ 中通过将类模板完全特化的成员函数的定义放入单独的 TU 来分离它们? template<> voi ...
我又在为 Boost.Spirit.X3 苦苦挣扎了。 我有几个解析器的逻辑组(语句、表达式等),每个组由几个文件表示: group.hpp - 包含用于“外部”的解析器的typedef 、 BOOST_SPIRIT_DECLARE和extern变量声明 group_def.hpp - ...
是否可以跨所有翻译单元进行 #define 或类似的预处理器定义? 标头实现对于非常小的库很有用,因为所有代码都可以包含和分布在具有以下结构的单个标头中: 然而,这种结构要求用户在头文件只包含在他们的一个翻译单元中之前定义IMPLEMENT_LIBRARY ,这意味着它不能放在用户的头文件中, ...
在 C 中,我可以在 header 文件中声明结构和一些公共函数,而在源文件中可以将一些“私有”函数声明为 static。 例如: foo.htypedef struct Foo { ... } Foo; void func1(Foo *foo); foo.c#include "foo.h" ...
我有一些可以检查的课程。 实现这一点的代码在 header 文件中声明了一个 function 模板,并将其专门用于不同的源文件: 这段代码是这样使用的: 这工作得很好。 当我添加另一个我可以检查的 class Class3时,我不需要触摸 header 文件,因为它定义了一个非常宽的接口。 如果 ...
我想知道以下两个声明之间的区别是什么,如果两者都写在一个头文件中: 如 C++17 中所述,向变量添加内联会强制所有翻译单元看到该变量的相同地址。 这是否意味着obj2可以在不同的翻译单元中获得不同的地址值? 强调我们应该使用obj1而不是obj2什么? ...
假设我有一个头文件,并假设复制宏已处理:f1.h: 在包含此标头的任何地方,翻译单元都将拥有自己的 obj 副本。 那么,如果 a.cpp、b.cpp 和 ch 包含这个头文件,obj 将被实例化 3 次? 现在,如果我有以下内容: f2.h: f2.cpp: 在这种情况下,我的 ...
我正在阅读内部和外部链接,我发现默认情况下一个函数有一个外部链接。 所以我在想是否可以在头文件管理器中声明一个函数,并在不同的翻译单元中提供它的多个定义。 到目前为止,我确实在头文件中声明了一个功能 并在两个文件中提供2个定义,每个文件都包含在一个匿名命名空间中: 但 ...
我们有2个案例(场景)。 在每种情况下,我们都有2个文件: main.cpp和file.cpp 情况1 main.cpp: #include <iostream> #include "file.cpp" // this line is what matter ...
在实践中,使用简单的静态函数创建单例模式,该函数返回一个本地静态变量。 只要实例是静态的,它就会返回在第一次函数调用期间定义一次的相同变量。 对我来说令人困惑的部分是,如果我在一个头文件中声明具有静态局部变量的常规静态函数,并且当它们调用该函数时将该头部包含在两个不同的转换单元中,则将函 ...
我有一个包含成千上万个C文件,许多库和数十个程序的项目,以链接并加快编译速度,我正在将C文件合并为包含多个C文件的翻译单元。 有时将其称为单一编译单元,单一翻译单元或统一构建。 我将这些翻译单元中的多个编译成不同的库,并且这些库以前是通过分别编译每个C文件来创建的。 例如: ...