What is a "translation unit" in C++?

C++

C++ Problem Overview


I am reading at the time the "Effective C++" written by Scott Meyers and came across the term "translation unit".

Could somebody please give me an explanation of:

  1. What exactly it is?

  2. When should I consider using it while programming with C++?

  3. Is it related to C++ only, or it can be used with other programming languages as well?

I might already use it without knowing the term...

C++ Solutions


Solution 1 - C++

From here: (wayback machine link)

> According to standard C++ (wayback machine link) : > A translation unit is the basic unit > of compilation in C++. It consists of > the contents of a single source file, > plus the contents of any header files > directly or indirectly included by it, > minus those lines that were ignored > using conditional preprocessing > statements. > > A single translation unit can be > compiled into an object file, library, > or executable program. > > The notion of a translation unit is > most often mentioned in the contexts > of the One Definition Rule, and > templates.

Solution 2 - C++

A translation unit is for all intents and purposes a file (.c/.cpp), after it's finished including all of the header files.

http://msdn.microsoft.com/en-us/library/bxss3ska%28VS.80%29.aspx

Solution 3 - C++

A hard question to answer definitively. The C++ standard states:

> The text of the program is kept in units called source files in this International Standard. A source file > together with all the headers (17.4.1.2) and source files included (16.2) via the > preprocessing directive #include, less any source lines skipped by any of the > conditional inclusion (16.1) > preprocessing directives, is called a translation unit. [Note: a C++ > program need not all be translated at > the same time. ]

So for most intents and purposes a translation unit is a single C++ source file and the header or other files it includes via the preprocessor #include mechanism.

Regarding your other questions:

> 2) When should I consider using it > when programming with C++

You can't not use it - translation units are the basis of a C++ program.

> 3) If it is related only to C++, or it > can be used with other programming > languages

Other languages have similar concepts, but their semantics will be subtly different. Most other languages don't use a preprocessor, for example.

Solution 4 - C++

The book makes it clear enough. When Meyers referes to a "translation Unit", he means a source code file.

Solution 5 - C++

A translation unit is code that is passed to the compiler proper. This typically means the output from running the preprocessor on the .c file.

Solution 6 - C++

In addition to the ODR, the translation unit is important in the definition of unnamed namespaces, which replaces one of the old uses of "static".

I guess I still don't have enough points to add a comment under the top answer.

Solution 7 - C++

C and C++ programs consist of one or more source files, each of which contains some of the text of the program. A source file, together with its include files (files that are included using the #include preprocessor directive) but not including sections of code removed by conditional-compilation directives such as #if, is called a "translation unit."

Solution 8 - C++

According to MSDN: C and C++ programs consist of one or more source files, each of which contains some of the text of the program. A source file, together with its include files (files that are included using the #include preprocessor directive) but not including sections of code removed by conditional-compilation directives such as #if, is called a "translation unit."

Solution 9 - C++

Every cpp/c (implementation) file will be converted into a translation unit (ie.,object file (.obj)) headers in the cpp file will be replaced with the actual text from the header files.

Solution 10 - C++

As others have said, a translation unit is basically the contents of a source file after preprocessing. It's the topmost production in the language grammar; you would only need to worry about it if you were writing a C or C++ compiler.

Solution 11 - C++

In my view, a "translation unit" is typically a single "post-preprocessing" source file. You can get more details on this MSDN page. http://msdn.microsoft.com/en-us/library/bxss3ska(v=vs.80).aspx

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHarryView Question on Stackoverflow
Solution 1 - C++JeffHView Answer on Stackoverflow
Solution 2 - C++Ana BettsView Answer on Stackoverflow
Solution 3 - C++anonView Answer on Stackoverflow
Solution 4 - C++Ed S.View Answer on Stackoverflow
Solution 5 - C++sigjuiceView Answer on Stackoverflow
Solution 6 - C++Allan StokesView Answer on Stackoverflow
Solution 7 - C++ganesh marmatView Answer on Stackoverflow
Solution 8 - C++rahulView Answer on Stackoverflow
Solution 9 - C++yesraajView Answer on Stackoverflow
Solution 10 - C++John BodeView Answer on Stackoverflow
Solution 11 - C++YangView Answer on Stackoverflow