『分割コンパイル時に、複数のファイルのそれぞれで、同じ名前の大域変数の定義を行った場合、どういう結果になるか示せ。また、エラーになった場合はその原因を示せ』という課題なのですが、まったくわからないので手を貸してください
コンパイルすることができない状況なので、誰か答えを教えてください
分割コンパイルで分からないことがあります
Re:分割コンパイルで分からないことがあります
言語も処理系も不明なので、正確なことが何もいえませんが...
1. 「大域変数」の定義を明確にしてください。
2. 複数のファイルとありますが、複数の翻訳単位ではなく、複数のソースファイルということでよろしいですね?
1. 「大域変数」の定義を明確にしてください。
2. 複数のファイルとありますが、複数の翻訳単位ではなく、複数のソースファイルということでよろしいですね?
Re:分割コンパイルで分からないことがあります
質問者自信がわからないことを、回答者がわかるはずがありません。
> 分かる範囲でいいので
不明な点を勝手に解釈してよいなら回答可能ですが、それでよいのでしょうか?
> 分かる範囲でいいので
不明な点を勝手に解釈してよいなら回答可能ですが、それでよいのでしょうか?
Re:分割コンパイルで分からないことがあります
言語はC++で、「大域変数」とは大域的名前空間有効範囲を持つオブジェクトのことだと解釈します。
> 分割コンパイル時に、複数のファイルのそれぞれで、同じ名前の大域変数の定義を行った場合、どういう結果になるか示せ。
1. 同一翻訳単位に属している複数のファイルで、同じ名前の大域変数の定義を行った場合はコンパイルエラーを生じる。
2. 異なる翻訳単位に属している複数のファイルで、同じ名前を持ち、かつ外部結合を持つ大域変数の定義を行った場合はリンクエラーを生じる。
3. 異なる翻訳単位に属している複数のファイルで、同じ名前を持つ大域変数を定義した場合でも、内部結合を持つ場合は原則として問題ない。
4. 異なる翻訳単位に属している複数のファイルで定義された同じインライン関数またはテンプレートで、3.の条件に合致する大域変数を挙用した場合はエラーを生じる場合がある。
5. GCCのように、1.から4.に該当する大域変数であっても、初期化子を伴わない定義の場合は問題なく利用できる処理系もある。
> エラーになった場合はその原因を示せ
単一定義規則違反
> 分割コンパイル時に、複数のファイルのそれぞれで、同じ名前の大域変数の定義を行った場合、どういう結果になるか示せ。
1. 同一翻訳単位に属している複数のファイルで、同じ名前の大域変数の定義を行った場合はコンパイルエラーを生じる。
2. 異なる翻訳単位に属している複数のファイルで、同じ名前を持ち、かつ外部結合を持つ大域変数の定義を行った場合はリンクエラーを生じる。
3. 異なる翻訳単位に属している複数のファイルで、同じ名前を持つ大域変数を定義した場合でも、内部結合を持つ場合は原則として問題ない。
4. 異なる翻訳単位に属している複数のファイルで定義された同じインライン関数またはテンプレートで、3.の条件に合致する大域変数を挙用した場合はエラーを生じる場合がある。
5. GCCのように、1.から4.に該当する大域変数であっても、初期化子を伴わない定義の場合は問題なく利用できる処理系もある。
> エラーになった場合はその原因を示せ
単一定義規則違反