FC2ブログ

【C言語】externとconstについて学ぶ【C++】

プログラム書いてて、円周率とかをプログラムごとに定義し直すのは如何様なものか…と。

というわけで共通にさせようと言う魂胆を持った。
これは分割コンパイルによって単独で動作保証されていたものの独立性を崩すのでオススメはしない。
自分は円周率とかの定数を変数として渡すのも、ファイルごとに定義し直すのもアレだったのでこれを使う事にした。


以下自分用のメモ。
externをつけることでどうやら外部リンケージになるようだ。
constの扱いがCとC++で違っているので注意。
Cだと外部リンケージなのだが、C++だと内部リンケージになっている。

ちなみに外部リンケージは外に見えている状態。

a.c, b.c, c.cというファイルがあったら(C言語)
~~~a.c~~~
(extern const int hoge;)
const int hoge=1;
~~~b.c~~~
extern const int hoge;
~~~c.c~~~
extern const int hoge;
で動く。

~~~a.c~~~
extern const int hoge=1;
~~~b.c~~~
extern const int hoge;
~~~c.c~~~
extern const int hoge;
でも動く。(推奨はしない)

~~~a.c~~~
extern const int hoge;
~~~b.c~~~
extern const int hoge;
~~~c.c~~~
extern const int hoge;
だとアウト。


次にC++の場合。
C++だとconstは内部リンケージなので、
~~~a.cc~~~
extern const int hoge;
const int hoge=1;
~~~b.c~~~
extern const int hoge;
~~~c.c~~~
extern const int hoge;
とする必要がある。
a.ccのextern const int hoge;の部分は必須。

~~~a.cc~~~
extern const int hoge=1;
~~~b.c~~~
extern const int hoge;
~~~c.c~~~
extern const int hoge;
でも良い。

Cのファイルならのexternは抜いても外部リンケージなので動作する。
C++の場合はconstを用いると内部リンケージになるので、他のファイルが持つ同じ名前の変数と競合してエラーがおこる。
スポンサーサイト



テーマ : ひとりごと。
ジャンル : 日記

コメント

非公開コメント

中野梓
プロフィール

dhythm

Author:dhythm
関西に住む大学院生。専攻は宇宙物理学。
専攻が宇宙物理学の理学修士。現在は社会人。
Mac, Windowsを併用。Linuxでサーバーマシンをたてる計画中。
使用言語 : C, Java, COBOL, Perl, Python, Object-C

社会の荒波にもまれながら、日々勉強中。

アクセスカウンター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード