そんな素朴な疑問を耳にしました。
なるほど、Javaで一人前になった若者が数人集まって愚痴っているようです。かび臭いC/C++のスパゲティソースの面倒見を押し付けられたのでしょう。
さて、externとは何でしょうか。
答え1
ヘッダファイルに書いていない関数を呼び出すときに、コンパイルエラーにならないようにするために書くおまじないさ。
(コンパイルエラーは解消されるけど、代わりにリンクエラーが出るんですけど)
答え2
externなんて使っちゃだめだよ。関数のプロトタイプ宣言は、きちんとヘッダファイルに書かなくちゃ。
(え~2重インクルードはどうするの~?)
答え3
実は太古の昔にはexternとinternが存在したのぢゃ。
extern宗とintern宗の対立の歴史は、人類の歴史と同じくらい長い。
対立の原因は今となっては誰も知らないが、とにかくexternのみが生き残った。正統な継承者である我々は、externを守っていかなければならないのぢゃ。
わけのわからんC言語の規格本をひっぱりだしてきてもっともらしい説明をしたって無意味です。
コンパイラとリンカと、そして計算機の三角関係について正しく知らなければ、きちんと説明することはできないのです。
三角関係の男女を前にして、
そんな無益な関係はさっさと解消してしまいなさい
などと助言することは簡単です。
JavaやC#を指差して、ヘッダーファイルや分割コンパイルの虚しさを指摘することは誰にでもできることなのです。
(2008.02.06追記)
リンクル
教えてgoostatic と externについてhttp://oshiete1.goo.ne.jp/qa3670390.html