025 2000/10/19 default

[ 前回 ] [ 次回 ] [ 戻る ]


今回は文体を変えてみました。
それにしても、SPAMの話ていつ(げしいっ)

…当分先のようです。



設定といっても「default」な設定、というものはやはりあるわけで。

default設定の例としては、WindowsのプログラムはC:\Program Files\以下にだいたい置いてあるとか、UNIX系では、フリーで配布されているソフト(apacheとか)は /usr/local 以下に置かれるように設定してあるとか。(Linuxは変な配置ですけど)

この辺の他のところに置いてもたいてい動作しますが、その場合、全体の見通しが悪くなることってありますよね。

では、defaultから外れたことをすると誰が泣くか。…泣くんですよ、これが。
…途中から違っているような気もしますが。まあ、それはそれ。


(1) コンパイルオプションの設定

C言語のコンパイル時に"cc -g -O なんとか"と書く場合が多いですが、それらはたいていMakefileに書くのが普通です。

FLAGS= -DSOLARIS2=260 -O -g
LIBS= /usr/local/lib/なんとかかんとか
INCLUDES= $(SRCDIR)/include

こんな感じですか。あとから変更する場合や、フリーソフトで設定するところがわからなければとりあえずMakefileを見に行くとたいてい解決することができます。最近は、configure一発(Makefile自動生成)ってのが当たり前になってますから、Makefileを修正することは少なくなってますが。
で、最近見かけたのですが、あるところの ~/.cshrc の中の1行。
(実際は似たようなものが数行ありました)

setenv CFLAGS '-g -I. -I/export/home/...(略)..../include'

確かにこれでも動くんでしょうけど、これ、ソースのディレクトリ内のファイルだけでは正しくコンパイルできない可能性もあるわけで、他の人がコンパイルしようとするなら、上の行も持っていかなければならないかもしれない。ある環境だけでコンパイル・実行できればそれでも良いのかもしれませんが、
それではあんまりですよね。

あ、ハードウェアごと売るのならこれでも良いのか。動かなかったらメンテナンスとか称してお金をいただくとか…それはあこぎですねえ。実際にこういう方法でユーザの囲い込みをしていたら嫌だなあ。


(2) ユーザ名とhomeディレクトリ

UNIXで新規ユーザを設定するときに、homeディレクトリは /home/ユーザ名 に設定するというのが普通ですよね?これが違っている設定があったりします。

例:ユーザ名:foo、homeディレクトリ:/home/BAR ← (しかも大文字)

こんな場合、シェル上で

%cd ~foo

とやると、/home/BAR にディレクトリが移動します。これ、ものすごく使いづらいんですが、実際にこんな設定をみたことがあります。今日。
よく混乱しないで使っているなー、と感じてしまいます。


(3) ルータのIPアドレス

以前、外部の会社に某設定をしてもらったときに、こんなことを言われたことがあります。

ルータのIPアドレスを見て、
「普通、ルータのアドレスってxxx.xxx.xxx.1を使うんですよねー」
それも、嫌みったらしく。

そんなこと聞いたことないんですけど。RFCにも書いてないだろうしなあ。特に、プロバイダとかで複数のルータを持っている場合はどうなるんだろう、というわけで、ちょいとtracerouteをつかって調べてみますか。tracerouteの先は当然そういうことを言った人の会社、ってことで。

結果のIPアドレスをそのまま書くのはアレなので、最後の8bit部分だけ並べておきます。

1, 52, 10, 57, 13, 245, 105, 125, 71, 129, 198

全然法則性がないってのが分かります。しかも1に近い数字がひとつしかない。…あ、これはうちの会社のだ。 ^_^;
伝説のようなものなんですかねえ。何か情報があればよろしく。

ちなみに、そのときの某設定ですが、来た人の設定が間違っていて、後でこっちで修正しましたけど。…金返せ、こら。
さすが米国で作って輸入して、日本じゃまともな人材がいない会社だけのことはあります。(言い過ぎ)


(4) *.h

ヘッダファイルですね。
この中にif文があったりする場合があります。

…っておい。
「#ifdef」じゃないところがミソ。

そりゃあ、コンパイルも実行もできますけどねえ。ある foo.c の中に問題のヘッダがこそっと入っていた日には。
メンテナンスする人は「このif文、どこで使われているのか分からない…」と泣いているらしいです。

メンテナンス時にはまる好例というか。…嫌な例ですな。


(5) 変数の初期化

ポインタ変数を引数にとる関数で、関数内の最初にこんな行があったそうです。

int foo(char *a)
{
a = NULL;
(以下略)
}

プログラムをチェックしていた人は固まってました。聞いていたわしは爆笑ものでしたが :-)

何でもかんでも初期化すれば良いというのものではありません。
あ、これは「初期化はdefaultではない」という例だった。



最後に(内輪での)お約束。

(番外) if文

一つのif文がネストを含めて終わるまで1万行(だっけ?)。
defaultでも何でもないじゃん。

コンパイル中にメモリ不足で落ちます。
…待てよ。この話ってMS-DOSのときだったから、ひょっとしてWindows環境ではコンパイルできてしまうとか?間違って(?)できたらできたですごいことになっているのかもしれないですねえ。万が一、それをメンテナンスしようものなら。…あはははは。


災厄は案外近くに転がっていることが多いと言いますし。恐いものです :-)