[1039] Re:externについて
投稿者:(ぱ)こと管理人
2007/08/29 00:34:30
>この小細工を施したヘッダを『すでに定義を書いてあるファイル』に
>インクルードしているようなソースが世の中に(けっこう)存在する
>
>という大前提がありますよね。
えっ?
…と読み返したら、yuyaさんの[1034]には確かにそう書いてありました。
(すみません、よく読んでませんでした)
この小細工を使うときには、.cにはそもそも定義を書かないと思います。
.cに定義を書いたらメリットがまったくありませんので。
>>・この小細工は、(1)の問題の解決には役に立たない
>えーと、これは「小細工を施してもコンパイラはチェックしてくれない」と
>いう意味ではなく、「チェックしてくれるのは小細工のおかげではない」と
>いう意味ですよね?
そうです。
小細工を行わないとき、方法はふたつあって、[1037]で言うところの
a)defvar.cに定義を書き、extern.hに宣言を書く。
defvar.cではextern.hを#includeする。
b)defvar.cに定義を書き、extern.hに宣言を書く。
defvar.cではextern.hを#includeしない。
a)なら型チェックが効きますが、b)では効きません。
774RRさんがおっしゃるような、
>この小細工はexternとは同一翻訳単位外のものを取り扱うものだと
>「誤解したプログラマ
なら、a)はそもそも書けないと思い込んでいるから、型チェックのため
小細工を行った、というのが、私が書いた
「(1)を問題視したプログラマがこの小細工を使った」
の意図です。