68user's page 掲示板

Prev< No. 4398> Next  [最新発言に戻る] [過去ログ一覧]
No. 4398 # 68user 2005/11/16 (水) 03:05:19
>>4397 DNS勉強中
> http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1093.txt
> ただ上記は意図に沿った記述かどうか自信がありません。
そういえばわたしには、複数ファイルから参照されるグローバル変数で、
宣言と初期化を同時に行った経験がありませんでした (わたしはこういう
場合は init_hoge() という関数を作るので)。

要は main.c で
    codelist_t class_list[];
    codelist_t class_list[] = {
        {"INTERNET", 1},
        ...
    };
となるわけですが、これはコンパイル通りますか? 少なくとも警告くらいは
出そうな気がします。

普通はどう書くんでしょうね>どなたか

> それと、この件は今回のソースとは直接関係ないという認識で宜しいでしょうか?
その通りです。

その他ソースについて。
> int soa_record_print(struct DNS_Response *DNS_response, char *print, int i)
引数が i というのはかなりいただけないので、record_num あたりで。

> for (i=0; type[i]!='\0'; i++)
> /* 照会タイプの文字の中に英小文字があれば英大文字に変換 */
> type[i] = toupper(type[i]);
そういえば strcasecmp(3) というライブラリ関数があるのを思い出しました
(使ったことはないですが)。

> void qr_print(int qr){
> codelist_t qr_list[] = {
> ...
> };
動作的には問題ありませんが、関数呼び出しのたびにスタックに qr_list の値が
積まれるのは無駄なので、一般的には
      static codelist_t qr_list[] = { ... };
とします。これだとスタックではなくヒープに置かれ、初期化は一度しか行われません。

> Makefile(linux版)
> http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1095.txt
わたしなら以下のように書きますが、あまり Makefile に詳しくないので怪しげです。

    TARGET= domain_to_ip
    OBJS = main.o sub.o
    CFLAGS = -Wall
    $(TARGET): $(OBJS)
            $(CC) $(CFLAGS) -o $(TARGET) $(OBJS)
    .c.o: sub.h
            $(CC) $(CFLAGS) -c $<
    clean:
            rm -f *.o *~ core $(TARGET) $(OBJS)

あと、main がとても長くて汚い関数に見えますので、
    make_query();
    send_receive();
    parse_response();
の 3行か+エラー処理か、あるいは
    make_query();
    send_query();
    receive_response();
    parse_response();
の 4行+エラー処理くらいになるとよいかも、と思いました。

続く。

Prev< No. 4398> Next  [最新発言に戻る] [過去ログ一覧]