[Anthy-dev 1581] Re: warningについて

Back to archive index

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*****



Anthy-dev メーリングリストの案内
Back to archive index