YamaKen
yamak****@bp*****
2005年 1月 11日 (火) 16:32:18 JST
ヤマケンです。 At Tue, 11 Jan 2005 15:03:34 +0900, tkng****@xem***** wrote: > 以下がgccが出すwarningとそれに関するコメントです。 > > $make > build.log > uim-scm.c:50:60: warning: "/*" within comment > uim-scm.c:51:6: warning: "/*" within comment > > /*はコメント内に出てきてはいけないのですが、どうしたらいいかちょっとわ > かりません。 あれ、そうだったかな…と思ってISO/IEC 9899-1999で確認してみまし た。 6.4.9 Comments ではネストしてはいけないとは書いてあるけど "/*" を含んではいけないという規定はないようです。 ただし、間違いではないwarningについてもuimとして撲滅運動を進める という事であれば、何とかしたいと思います。今のところいいアイディ アはありませんが。 > In file included from uim-scm.c:57: > uim-compat-scm.c: In function `uim_scm_c_list_free': > uim-compat-scm.c:301: warning: suggest parentheses around assignment used as truth value > uim-scm.c: In function `uim_scm_init_subr_0': > uim-scm.c:409: warning: passing arg 3 of `siod_init_subr' from incompatible pointer type > uim-scm.c: In function `uim_scm_init_subr_1': > uim-scm.c:415: warning: passing arg 3 of `siod_init_subr' from incompatible pointer type > uim-scm.c: In function `uim_scm_init_subr_2': > uim-scm.c:421: warning: passing arg 3 of `siod_init_subr' from incompatible pointer type > uim-scm.c: In function `uim_scm_init_subr_3': > uim-scm.c:427: warning: passing arg 3 of `siod_init_subr' from incompatible pointer type > uim-scm.c: In function `uim_scm_init_subr_4': > uim-scm.c:434: warning: passing arg 3 of `siod_init_subr' from incompatible pointer type > uim-scm.c: In function `uim_scm_init_subr_5': > uim-scm.c:441: warning: passing arg 3 of `siod_init_subr' from incompatible pointer type > uim-scm.c: At top level: > > uim-scm.cに関しては、warningの中身はチェックしてませんが、 siod_init_subr()はuim-scm.cで定義されたstatic関数です。これらの warningは単純にcast忘れなので修正しときます。 > staticと宣言さ > れている関数を外部から呼んでるのが気になります。というか、siod.hに r216の変更により、slib.cはuim-scm.cに直接includeされています(リ ンクしない)。また、siod.hをincludeしているのもuim-scm.cとそれか らincludeされているuim-compat-scm.cだけです(uim-tableを除く)。こ のためstatic関数を外部から呼んでいるわけではありません。 > staticな関数のプロトタイプ宣言を書くのには、どういう意味があるのでしょう > か?私はそこら辺に関しては「staticと宣言された関数は外部のファイルから呼 > んではいけません(だからプロトタイプ宣言は.c内に書いておきましょう)」と > いう程度の知識しか持ってないので、ヘッダファイルにstaticな関数のプロトタ > イプ宣言を書くことが正しいのかどうか判別できません。 これについてはr216のcommit logが舌足らずだったんですが、"Make static. Should be moved into slib.c" と書いたのは、あくまでも応 急処置だという説明のつもりでした。 これらのstaticなプロトタイプはslib.c内の適切な行に移動されるべき ですが、私としてはこれらの宣言の塊をそのままslib.cに突っ込むので はなく、siod.hに移される前に元々あった位置か実際に関数が定義され ている順番に従って綺麗に並べたいと考えていました。ただその作業が 面倒なのでsiod.h側でstaticを付けるだけで済ませて作業を後回しにし ていました。 これは私の性格なんですが、作業するならするで区切りのいいところま で片付けてしまいたい、それができないなら手着かずのままにしておき たいという判断が働いています。 > slib.c:1314: warning: `set_repl_hooks' defined but not used > slib.c:2314: warning: `init_subr_4' defined but not used > slib.c:2320: warning: `init_subr_5' defined but not used > slib.c:2754: warning: `set_eval_hooks' defined but not used > slib.c:3990: warning: `siod_false_value' defined but not used > slib.c:3996: warning: `last_c_errmsg' defined but not used > > これらはガッサリ消しちゃっても構わないんでしょうか? いえ、将来使われる場合があるので残しといてください。 libuim.{so,a}に含めないだけなら問題ないですが。 > uim-custom.c: In function `extract_choice_list': > uim-custom.c:274: warning: suggest parentheses around assignment used as truth value > > for (p = choice_sym_list; choice_sym = *p; p++) { > > のchoice_sym = *pがまずいようです。 これは私の慣用なんですが、 > for (p = choice_sym_list; *p != NULL; p++) { > choice_sym = *p > > でいいんでしょうか? 先述したように間違いではないwarningについてもuimとして撲滅運動を 進めるのなら、このように書き換えます。 ただし私は「"!= NULL"は冗長だし目視文脈解析を妨げるので嫌いだよ 派」なので、 for (p = choice_sym_list; *p; p++) { choice_sym = *p こうなりますが。これもuimプロジェクトとして筋の通った方針を立て るなら違うスタイルに変えます。 ------------------------------- ヤマケン yamak****@bp*****