まず、下手なヘッダーファイルのオンパレードをお見せしましょう。リスト5−1〜5−6まで の6つのファイルがヘッダーファイルおよび、それに直接かかわるファイルです。それぞれの関係 は、次のようになっています。
リスト | ファイル名 | 意味 |
---|---|---|
5−1 | defglb.h | グローバル変数宣言 |
5−2 | defglb.ext | detglb.hのextern宣言 |
5−3 | dbstruct.h | グローバル変数宣言 |
5−4 | dbstruct.ext | dbstruct.hのextern宣言 |
5−5 | mktable.c | グローバル変数宣言 |
5−6 | glbdata.ext | mktable.cのextern宣言 |
リスト5−1 defglb.h グローバル変数宣言 |
1 double G_TANTEN[8][2], G_ALLOW, G_MARKCOU, G_XCUR,G_YCUR, G_XMARK[21], 2 G_YMARK[21], G_XABS,G_YABS, G_XRLT,G_YRLT, G_XPLR,G_YPLR, G_XWAKU1,G_XWAKU2, 3 G_YWAKU1,G_YWAKU2, G_XFIND,G_YFIND, FIG[5], *G_ZCX, *G_ZCY, GH_FIG[6]; 4 short G_YOSO,G_COLOR,G_SENSHU,G_LAYER, G_TNTN_IDX,G_YOSO_IDX, G_COUNT, TREQMD, 5 G_R_STS, *G_BUF; 6 short SV_HEAD; |
リスト5−2 defglb.ext detglb.hのextern宣言 defglb.ext | |
1 extern double G_TANTEN[8][2], 2 G_ALLOW, 3 G_MARKCOU, 4 G_XCUR,G_YCUR, 5 G_XMARK[21], 6 G_YMARK[21], 7 G_XABS,G_YABS, 8 G_XRLT,G_YRLT, 9 G_XPLR,G_YPLR, 10 G_XWAKU1,G_XWAKU2, 11 G_YWAKU1,G_YWAKU2, 12 G_XFIND,G_YFIND, 13 FIG[5], 14 *G_ZCX, 15 *G_ZCY, 16 GH_FIG[6]; 17 extern short G_YOSO,G_COLOR,G_SENSHU,G_LAYER, 18 G_TNTN_IDX,G_YOSO_IDX, 19 G_COUNT, 20 TREQMD, 21 G_R_STS, 22 *G_BUF; 23 extern short SV_HEAD; |
リスト5−3 dbstruct.h グローバル変数宣言 |
1 struct SYSH{ 2 double FIG[5]; 3 unsigned char SBC; 4 unsigned short ATRIB[3]; 5 }; 6 short ssta; 7 struct { 8 short SUBNUM, MODE, INDEX, OFFSET, GINDEX, GOFFSET, GHIDX, GHOFF, 9 GPNO, GLEVEL, COUNT, STS, OIDX, SVIDX, SVLEVEL, WK[5]; 10 unsigned short ID, 11 SUBID, LAY, COL, L_TYPE, L_ARW, L_WIDE, C_LEN, C_F1, C_F2, CO_BIT, 12 MSL, MARKN, MARKX, MARKY, DSEL, STBL_ADR, R_CT_SU, R_CF_SU, R_EF_SU, R_ET_SU, 13 Rcqmax, USER, TAGS, ZC_XP, ZC_YP, ZC_NUM; 14 double XPOS, YPOS, ABSX, ABSY, RLTX, RLTY, PLRX, PLRY, OPX, OPY, GRID, 15 WTST[4], GPSUB[4]; 16 struct SYSH DATA; 17 } DAM; 18 short sea; |
リスト5−4 dbstruct.ext dbstruct.hのextern宣言 |
1 struct SYSH{ 2 double FIG[5]; 3 unsigned char SBC; 4 unsigned short ATRIB[3]; 5 }; 6 extern short ssta; 7 extern struct { 8 short SUBNUM, MODE, INDEX, OFFSET, GINDEX, GOFFSET, GHIDX, GHOFF, 9 GPNO, GLEVEL, COUNT, STS, OIDX, SVIDX, SVLEVEL, WK[5]; 10 unsigned short ID, SUBID, LAY, COL, L_TYPE, L_ARW, L_WIDE, C_LEN, C_F1, C_F2, 11 CO_BIT, MSL, MARKN, MARKX, MARKY, DSEL, STBL_ADR, R_CT_SU, 12 R_CF_SU, R_EF_SU, R_ET_SU, Rcqmax, USER, TAGS, ZC_XP, ZC_YP, 13 ZC_NUM; 14 double XPOS, YPOS, ABSX, ABSY, RLTX, RLTY, PLRX, PLRY, OPX, OPY, 15 GRID, WTST[4], GPSUB[4]; 16 struct SYSH DATA; 17 } DAM; 18 extern short sea; |
|
|
オープンソース |
それぞれ2つのファイルは対になっていて、一方で実体の宣言し、他方でextern宣言(外部参照)
しています。
では、どこが問題でしょうか。もしかして、あなたもこのようなヘッダーファイルの書き方をし
ていると問題です。療法を読み始める前に、自分で問題点と思われることを考えてください。きち
んと字下げや改行をしていないことだけではありません。
Copyright1996 Hirofumi Fujiwara. No reproduction or republication
without written permission
『Cプログラミング診断室』目次/
次(第5章 管理は複雑に ほとんど同じ)