I know that #inclusion is often described as a text copy-pasting preprocessor directive. Now if a header is #include guarded, or #pragma onced, then how'd we describe what is actually happening past the first translation unit to #include said header?
How a multiple times #included guarded header file will be inside different translation units?
405 Views Asked by Physician At
1
There are 1 best solutions below
Related Questions in C++
- How to immediately apply DISPLAYCONFIG_SCALING display scaling mode with SetDisplayConfig and DISPLAYCONFIG_PATH_TARGET_INFO
- Why can't I use templates members in its specialization?
- How to fix "Access violation executing location" when using GLFW and GLAD
- Dynamic array of structures in C++/ cannot fill a dynamic array of doubles in structure from dynamic array of structures
- How do I apply the interface concept with the base-class in design?
- File refuses to compile std::erase() even if using -std=g++23
- How can I do a successful map when the number of elements to be mapped is not consistent in Thrust C++
- Can std::bit_cast be applied to an empty object?
- Unexpected inter-thread happens-before relationships from relaxed memory ordering
- How i can move element of dynamic vector in argument of function push_back for dynamic vector
- Brick Breaker Ball Bounce
- Thread-safe lock-free min where both operands can change c++
- Watchdog Timer Reset on ESP32 using Webservers
- How to solve compiler error: no matching function for call to 'dmhFS::dmhFS()' in my case?
- Conda CMAKE CXX Compiler error while compiling Pytorch
Related Questions in VISUAL-STUDIO
- The current .NET SDK does not support targeting .NET Core 6.0. Brand new WPF Project VS Community 2022 17.9.5
- Dotnet Run is not working but the application is running in Visual Studio
- Is there a way to support Tailwind @apply in Visual Studio?
- How can I eliminate compile warnings using ZLib in Visual Studio
- C++(or Visual Studio) saving the file will not preserve the original file contents
- VS Community 2022 cannot install dotnet-ef when i try to publish
- Visual Studio 2022 convert spaces to tabs on checkout and back to spaces on checkin
- What should I do if Visual Studio has a restriction on creating files with a long name or a long path to these files?
- Command line error D8036 - not allowed with multiple source files with node-gyp and VS2022
- Migrate Old VS 2015 .suo file to the New VS 2022 DocumentLayout.json
- How to make one executable visual studio, that users can run?
- Use tabs instead of spaces in .csproj file in Visual Studio 2022
- Unity - scrollview/dragging breaks after specific scene inactivity
- How to make Visual Studio 2022 project launch Windows Terminal instead of PowerShell?
- Why is 'EDITBIN /STACK:2097152 w3wp.exe' cmd is giving me an LNK1342 error?
Related Questions in INCLUDE
- A multi-line substitution in RST
- External macro definition in header
- Premake configuration - include directories in a multi project work directory
- Django NameError: name 'include' is not defined in urls.py
- "avr/io.h" not found when compiling assembly for ATmega128
- Re-flex library not found in C++ autotools project
- Fortran compilation dependency of modules and INCLUDE statement with make
- How exactly is include/require resolved in PHP?
- Sequelize - Wrong sql request generated using include, with a basic example
- C++11 - GCC - Can #import (used once) replace many #include? (or is that necessary?)
- How to have individual include directories for each subdirectory?
- Paraview paraview.plugin purpose
- VS code : #include<execution> :-#include errors detected. Please update your includePath
- C: redefinition of function when using #include
- Include error with # include <sys/wait.h>
Related Questions in INCLUDE-GUARDS
- Why aren't these header files #include guarded?
- C, C++: Duplicate Header File Inclusions Across Multiple Files - Preprocessor/ Compiler Behavior & Best Practices
- Are include guards considered defined after the #define directive or after the #endif directive
- Use of #error directive in include guards
- How a multiple times #included guarded header file will be inside different translation units?
- How to disable inclusion of header when using `#pragma once` (similiary to when using include guards)?
- Avoiding multiple includes c++
- C: Extern variable declaration and include guards
- How do I best use #include to prevent my multiple definition error?
- Include file includes itself with guards
- How to ensure #include doesn't recursively add (only adds unique files once)
- Use of "#define FOO" with no value assigned - other than as include guard?
- Difference between inline and header guards
- Why do I keep getting Redefinition of Class Error? C++
- What is `#ifndef FUNCTIONS_H` in functions.h for?
Related Questions in TRANSLATION-UNIT
- Prevent c++ template codes from being compiled for many times
- Is a Translation Unit always a file?
- How to avoid deferring the initialization of static storage duration variables?
- How can static local variable shared along different translation unit?
- ODR and C++ Versioning for Shared Library Wrapper
- Is a translation unit valid C++? And is a translation unit (for GCC) the output of g++ -E?
- Is there any reason I should include a header in the associated cpp file if the former only provides declarations the latter defines?
- How to have TU-specific function template instantiation?
- constexpr function which is shared in multiple modules
- How a multiple times #included guarded header file will be inside different translation units?
- How many translation units in one module?
- Translation unit when including a source file?
- Why the weak symbol defined in the same .a file but different .o file is not used as fall back?
- Including multiple .c files in a single translation unit
- Does `#pragma GCC system_header` in a header file extend into another source or header file that includes it?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
There is no "first" translation unit. All translation units are conceptually translated in parallel (of course, in practice you might end up compiling them one at a time, but it doesn't matter).
Each translation unit begins with a blank slate. Technically that isn't quite true because you can add
#defines at the command line and there are some predefined macros as well, but anyway, no translation unit will have a "memory" of#defines that were executed in any other translation unit. Thus, a header may be#included multiple times despite the guards. It is just that it won't be#included multiple times into a single translation unit.This means that you must still take care to avoid multiple definitions: for example, if your header contains a global variable then you must ensure it is
const(so it will have internal linkage) or explicitly declare itinline(to collapse all definitions into one) orextern(to suppress definition in the header so you can place the definition into a single translation unit).Despite the fact that include guards don't prevent multiple definitions across multiple translation units, they do prevent multiple definitions within a single translation unit, and this is important because even though some entities may be defined multiple times in a program, it's still not allowed for multiple definitions to appear in the same translation unit. For example, if you have an
inlineglobal variable in a header, then multiple translation units can include that header and the definitions will all be collapsed into a single definition at link time, but you will get a compilation error if any one translation unit defines that variable multiple times. Therefore, such a header must have an include guard.