[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freewnn:00308] jutil
- To: freewnn@tomo.tomo.gr.jp
- Subject: [freewnn:00308] jutil
- From: Hiroo ONO <hiroo@XXXX>
- Date: Sat, 12 Feb 2000 07:27:41 +0900
- Reply-To: freewnn@tomo.gr.jp
小野寛生です
dtoa とかに自分の欲しい feature を入れてみたいと思って、source を眺め
始めました。自分で書こうと思って C を眺めるのは久しぶりで、もともと大
したことがないのに、すっかり忘れてしまっていることを思い知らされていま
す。
で、いくつか気になる点があります。
間抜けな質問かも知れませんが、教えて頂けないでしょうか。
1. prototype宣言
prototype 宣言は Ansi C のを使えるようにしようよという話があったと思
います。以前出ていた話では、
* FreeBSD の source にあるように __P macro を使う。
* ansi2knr
というのがあったと思うのですが、どちらを取ればよいのでしょう?
前者なら、とりあえず、FreeBSD 3.4-stable の /usr/include/term.h から引っ
張ってきた、
#ifndef __P
#if defined(_USE_PROTOTYPES) && (defined(__STDC__) || defined(__cplusplus))
#define __P(protos) protos /* full-blown ANSI C */
#else
#define __P(protos) () /* traditional C preprocessor */
#endif
#endif
というのを commonhd.h に突っ込めば良いかなと思うのですが、こうした場合、
prototype は、
int function __P ((int));
でよいかと思うのですが、実際の関数の定義の部分はどう書くべきなのでしょう?
int
funciton __P((int var))
int var; /* ? */
{
}
なのか、? の部分は、ANSI C では消えるようにすべきなのか、ANSI C という
かとりあえず gcc だけ考えて function() としてしまってよいのか?
2. extern?
Xsi/Wnn/jutil/ 以下の .c ファイルには、prototype 宣言が
extern void func();
とか
extern int func();
となっているのですが、extern って何故ついているのでしょう???
% ほかにも、ujisf.c の関数は他で使われているので、いちいちプロトタイプ
% 宣言せずに、ujisf.h を作って include した方がよいかもしれない、とか。
3. どうしてこういう定義が?
たとえば、Xsi/Wnn/jutil/{atod,dtoa,atof}.c などでは
exit1() とか sort() という関数を使っているのですが、
そいつは Xsi/Wnn/jutil/ujisf.c で
void
exit1()
{
exit(1);
}
とか、
void
sort()
{
qsort((char *)jeary,jt.maxserial, sizeof(struct je *),sort_func_je);
}
とか定義されています。
Xsi/Wnn/jutil/ にあるファイルをざっと grep して見た限りでは、別にどこ
かに代入されたり、何かの引数になってから実行されている風もありません。
% sort() の方はもう一度きちんと確認する必要がありそうですが…。
というわけで、exit1() は
#include <stdlib.h>
exit(1);
で済むと思うのですが、さて何で今のようになっているのでしょう?
4. man
あんまり、関係ないのですが、現在はマニュアルが Xsi/Wnn/man 以下にあり
ますが、それはそっちにまとめた方がメンテナンスはしやすいでしょうか?
それとも、Xsi/Wnn/jtuil/dtoa.1 と source と同じ場所にあった方がよいで
しょうか。
% どちらの方式も世の中にあるようなのですが。
----
Hiroo ONO