2016-04-26 4 views
4

私は最終試験のために私のレビューの一つでこの質問を与えられました。私はそれに少し困惑している。 foo.cにグローバル定義int secret = 4が含まれているとします。

質問(これは、Linux環境でのPuTTYでコンパイルされている):と仮定foo.cがグローバル定義int secret = 4;が含まれており、bar.cはグローバルな定義が含まれてどうなるchar secret[16]; foo.cbar.cはリンクされていますか? secretのメモリはどれくらい予約されますか?私は、彼らが同じ名前の両方のグローバル定義されているので、彼らは両方の強い変数であることを、あなたは複数を持つことができないので(つまり、リンカエラー)がコンパイルされませんと思い:私の試み

強い変数..混乱しているところでは、どれくらいのメモリが実際にsecretのために予約されているかです。おそらくそれは自明ですが、(charは1バイトなので16バイト)+合計4バイトの合計で20バイトになるでしょうか?それはメモリが秘密、または何か他のもののために予約されていないので、リンクしないように、彼らは定義が矛盾している事前

+1

これは私にとって悪い試験問題のように思えます。これは誰もがやるべきことではないからです。基本的には、同じ名前のグローバルな定義が競合しています。私は個人的にはこのエラーが欲しいですが、実際には、初期化された定義が優先され、サイズが4になると思います(4バイトの整数を前提とします)。 –

+0

ああ。あなたの答えの出所を私に送ることができる参考資料はありますか?私はあなたが正しいと思います。 –

+2

_'ld:警告: '...'からのサイズ16の '_secret'の仮定義は、 '...'のより小さいサイズ4の実際の定義に置き換えられています。_ – Oka

答えて

1

感謝。

関連する問題