C++ 言語で「翻訳単位(translation unit)」という用語を目にするのですが具体的に何を指しているでしょうか.
曖昧に私が理解している翻訳単位は「ひとつのソースコードファイルとそれに include されるヘッダファイル全体」です.誤りや定義などがあれば教えて下さると助かります.宜しくお願いします.
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
特にその認識で齟齬はないと思います。
※細かいことを言うと、include されるのはヘッダのみとは限らない、とか、#if があったりすると条件により範囲から外れる、とか、色々ありますが
規格的な表現はドラフトのどれかを参考にするのが良いのではないでしょうか。
例えば https://isocpp.org/files/papers/n4296.pdf の2.1章の1段落目です。
投稿2021/01/02 03:49
総合スコア1681
0
C++もC++20からmoduleが追加されたので、話はますます複雑になってきています。module前夜としてはその認識で概ね問題有りませんでしたが、moduleがある今、あらたに次のことをおさえる必要があります。
モジュール宣言を行うことでそのファイルは1つの モジュール単位、かつ1つの翻訳単位となります。
投稿2021/01/03 02:00
総合スコア5852
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
大雑把には「ひとつのソースコードファイルとそれに include されるヘッダファイル全体」でも良いのですが正確には違います。
文法的な意味での翻訳単位はangel_p_57さんの書かれているとおりですが、コンパイラから見た実装的な意味での翻訳単位はそれとも違います。
linuxのGCCの場合で説明します。
g++はいくつかの処理を呼び出すコンパイラドライバです。
foo.cppをコンパイルするとき、g++は。プリプロセッサcppを呼び出し、次にプリプロセッサの処理結果を指定してコンパイラ本体を呼び出し、次にリンカldを呼び出します。
どのような命令に展開されるかはg++ -### foo.cpp を使って見ることが出来ます。
コマンドラインオプションに-Dや-Uや-include等を書くと、プリプロセッサの出力するファイルはその影響を受けます。これらのオプションとそこで指定されたファイルも翻訳単位となります。
従って、C/C++の場合、ひとつのソースコードをプリプロセッサで処理したもの、つまりコンパイラ本体の入力になるものが翻訳単位です。
プリプロセッサの出力を見るには g++ -E foo.cpp を実行してください。
なお、FORTRANのようなに同じファイルに入っている複数の手続きが別々の翻訳単位になる言語もあるので、翻訳単位はプログラミング言語によって定義が違うことを覚えておいてください。
投稿2021/01/02 23:12
編集2021/01/02 23:36総合スコア24670
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/03 02:04 編集
2021/01/05 09:23
2021/01/05 09:26
2021/01/05 09:50