Описание тега translation-unit

Единица трансляции - это основная единица компиляции согласно стандарту C++. Он состоит из содержимого одного исходного файла, а также содержимого любых файлов заголовков, прямо или косвенно включенных в него, за вычетом тех строк, которые были проигнорированы с помощью операторов условной предварительной обработки.
1 ответ

Почему оператор C++ new/delete/ варианты не должен находиться в заголовочных файлах?

Может кто-нибудь объяснить природу этой ошибки компиляции C++? Я балуюсь / учусь о перегрузке глобальных операторов new, delete и их вариантов. Я прочитал пару статей на эту тему, но я не смог найти ту, которая, по-видимому, касается именно этого. К…
05 сен '16 в 05:13
0 ответов

Когда можно получить доступ к символу из шаблона позже?

Этот пример компилируется: #include <cstddef> template<class T> int foo(const T* bar,size_t N) { return test(T{}); } struct Type { }; inline constexpr int test(Type) {return 0;} int main() { Type vals[4]; return foo(vals,4); } Для других…
21 фев '17 в 11:20
1 ответ

Использование функций, которые возвращают типы заполнителей, определенные в другом модуле перевода

У меня возникли проблемы с пониманием того, как расширение C++14 auto описатель типа, описанный в N3638, возможно, может быть реализован, и что, собственно, разрешено. В частности, одно из изменений в стандарте гласит: Если объявленный тип возврата …
2 ответа

Разделение кода на файлы и флаги O

При написании программ с кодом, который может выполняться параллельно на C, мы определенно используем O-флаги для оптимизации кода. gcc -Olevel [options] [source files] [object files] [-o output file] В больших проектах мы обычно разбиваем код на не…
30 окт '15 в 18:53
2 ответа

C++ Как объявить класс как локальный для файла

Итак, я знаю, что статические функции - это функции, локальные для файла. Таким образом, они не могут быть доступны из других файлов. Это работает и для классов? Я прочитал массу противоречий о том, как static class не объявляет, что класс содержит …
22 ноя '16 в 23:35
2 ответа

Запретить один и тот же макрос с разными определениями в нескольких единицах перевода

Я создаю библиотеку, которая будет нуждаться в различных макросах, определенных в командной строке (опция -D) для каждого полученного двоичного файла (.exe, .so, .dll), который ее использует. Я хотел бы, чтобы каждая единица перевода, которая будет …
1 ответ

Анонимное пространство имен в файле реализации шаблона

В файле.cpp анонимное пространство имен в основном имеет связь со всем файлом (после #include), поскольку файл.cpp никогда не будет включен другим файлом. Но тот же шаблон в заголовочном файле распространяет это анонимное пространство имен туда, куд…
02 авг '18 в 20:59
1 ответ

Считается ли несколько исходных файлов, передаваемых в gcc, как единое целое?

Я думаю, что я прочитал, что компиляция нескольких файлов с gcc в то же время можно достичь того же, что и при добавлении всех источников в один исходный файл, как в случае с модулем единой компиляции, но я больше не могу найти источники по этому во…
26 фев '19 в 18:33
1 ответ

Почему статический блок делает внутреннюю связь

Я понимаю, что создание чего-то статического создает внутреннюю связь, и другие единицы перевода не могут получить доступ к символу. Может кто-нибудь объяснить, почему создание статического делает это? это из стандартного или некоторого языкового тр…
29 ноя '18 в 06:59
1 ответ

Заголовочные файлы не включены в файл, но все еще могут использовать классы / функции из не включенных заголовочных файлов

Вот некоторый код из рассматриваемого файла, называемый Global.h, который используется в других заголовочных файлах и, кажется, прекрасно компилируется: #pragma once enum SType {null, lab, assignment, testPrep}; enum Code {none, 123, 222, 333, 432};…
16 окт '16 в 22:16
3 ответа

Сможет ли создание экземпляров шаблонов в предварительно скомпилированных заголовках сократить время компиляции?

Пример: скажем, я включаю в свой предварительно скомпилированный заголовочный файл: #include <vector> Поскольку несколько экземпляров вектора, таких как std::vector, std::vector и т. Д., Часто используются в моем проекте, это уменьшит время ко…
1 ответ

Объявление функции класса ' Struct в заголовке и определение в cpp. lnk2019 при использовании функции в отдельной библиотеке

Следующее построит нормально. Когда я пытаюсь использовать функцию в другой библиотеке, я получаю ошибки компоновщика. OtherClass.obj : error LNK2019: unresolved external symbol "public: float __cdecl myClass::myClassStruct::myConvoludedFunction(int…
19 янв '17 в 01:00
1 ответ

Каждый метод в отдельном файле C++

После некоторых проблем с выделением памяти. Я пытаюсь сделать каждый метод в отдельном файле, вот оригинальная программа: #include <boost/graph/adjacency_list.hpp> #include <boost/graph/vf2_sub_graph_iso.hpp> #include <boost/algorith…
19 мар '15 в 20:40
4 ответа

Почему определение встроенной глобальной функции в 2 разных файлах cpp приводит к волшебному результату?

Предположим, у меня есть два файла.cpp file1.cpp а также file2.cpp: // file1.cpp #include <iostream> inline void foo() { std::cout << "f1\n"; } void f1() { foo(); } а также // file2.cpp #include <iostream> inline void foo() { std::…
02 май '17 в 11:07
1 ответ

Экземпляр шаблона в разных единицах перевода

Насколько я знаю, каждый шаблон имеет разные экземпляры в каждой единице перевода, и для моего понимания единица перевода - это примерно cpp файл. Итак, если у меня есть файл с именем test.hpp со следующим содержанием: // test.hpp template <typen…
31 мар '15 в 11:14
1 ответ

Модуль перевода vs Модуль компиляции vs объектный файл vs исполняемый файл vs.... в C++

Я не смог найти разницу между модулем перевода, модулем компиляции, объектным файлом, исполняемым файлом... Во многих местах я видел, что один используется вместо другого. Мне известно, что эти файлы создаются во время компиляции и связывания програ…
2 ответа

C: уточнение по переводу

Если у нас есть два файла.c и файл.h: main.c sub.c sub.h, где main.c #include "sub.h" ... sub.c #include "sub.h" ... мы можем скомпилировать программу, либо я) gcc -o a.out main.c sub.c или ii) gcc -c main.c gcc -c sub.c gcc -o a.out main.o sub.o Уч…
29 янв '17 в 23:38
3 ответа

Структура с тем же именем, разные определения: ошибка сегментации с -O2

Я столкнулся с ошибкой сегментации в программе на C++, когда два скомпилированных вместе файла C++ содержат разные определения структуры (с одинаковыми именами). В соответствии с этим вопросом, я понимаю, что определения структуры ограничены единице…
3 ответа

Внутренние переменные связывания в заголовочных файлах. Распределяется ли переменная в памяти каждый раз, когда включается заголовок?

Допустим, у меня есть заголовочный файл Resources.h где я определил эти 5 структур: const IColor COLOR_BLACK(255, 0, 0, 0); const IColor COLOR_GRAY(255, 127, 127, 127); const IColor COLOR_WHITE(255, 255, 255, 255); const IColor COLOR_RED(255, 255, 0…
2 ответа

Встроенная функция в разных единицах перевода с разными флагами компилятора неопределенное поведение?

В Visual Studio вы можете установить различные параметры компилятора для отдельных файлов cpp. например: в разделе "генерация кода" мы можем включить базовые проверки во время выполнения в режиме отладки. или мы можем изменить модель с плавающей зап…