3月 082004
最近KDE方面でがんばっているkzk氏ですが、その仕事の一つのkhtmlの日本語禁則処理のpatchを見ていて、ヘッダーでstaticな変数を宣言しないほうがいいよとアドバイス。
で、その結果を受けてCVS-HEADが変更されているのに気が付いたので内容を確認してました。
変更内容を見て思ったのが、ヘッダーに配列が定義されたままになっているということ。どうやら、static修飾子を消しただけのようだ。私の意図としてはヘッダーで変数を定義するのではなく、ヘッダーでは宣言のみを行なって、配列の定義自体はbreak_lines.cppに移したらということだったのだが、どうやら言葉が全然足りなかったようだ。
それ自体は別にどうでもいいのだが、この変更を見ていて思ったのが、なぜコンパイルエラーにならないんだろうということ。というわけで、確認。
% cat a.c
const int val = 10;
% gcc -c a.c
% nm a.o
00000000 R val
% ln -s a.c b.cpp
% g++ -c b.cpp
% nm b.o
00000000 r val
man nmによると、「If lowercase, the symbol is local; if uppercase, the symbol is global (external).」ということなので、CかC++かで変数のスコープが異なっていることがわかる。
とりあえず、検索しまくって簡単な説明を発見。やはり、ARMなり、The C++ Programming Languageくらいは持っておいた方がいいなぁ。
Warning: count(): Parameter must be an array or an object that implements Countable in /home/asaki/www/wordpress/wp-includes/class-wp-comment-query.php on line 405