『Cプログラミング診断室』目次次(第5章 管理は複雑に ほとんど同じ)

第5章 管理は複雑に

グローバル


まず、下手なヘッダーファイルのオンパレードをお見せしましょう。リスト5−1〜5−6まで の6つのファイルがヘッダーファイルおよび、それに直接かかわるファイルです。それぞれの関係 は、次のようになっています。

▼続きがあります。

表5−1 ヘッダーファイルリスト一覧
リストファイル名意味
5−1defglb.hグローバル変数宣言
5−2defglb.extdetglb.hのextern宣言
5−3dbstruct.hグローバル変数宣言
5−4dbstruct.extdbstruct.hのextern宣言
5−5mktable.cグローバル変数宣言
5−6glbdata.extmktable.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;

 
リスト5−5 mktable.c グローバル変数宣言

     1	/****************************************/
     2	/*      グローバル変数の実体の宣言      */      
     3	/****************************************/
     4	#include "globals.h"
     5	
     6	struct  {
     7	        double  x;
     8	        double  y;
     9	        double  w;
    10	        double  pst;
    11	} Scale;
    12	
    13	struct  {
    14	        int     col;
    15	        int     no;
    16	        int     id;
    17	        int     subid;
    18	        int     lay;
    19	} cur_p;
    20	
    21	struct  line {
    22	        double  sx;
    23	        double  sy;
    24	        double  ex;
    25	        double  ey;
    26	        int     arw;
    27	} line, line2;
    28	
    29	struct  circle {
    30	        double  cx;
    31	        double  cy;
    32	        double  r;
    33	        double  sang;
    34	        double  eang;
    35	} circ, circ2, enko;
    36	
    37	
    38	int     delng_flg= 0;
    39	int     cmdng_flg= 0;
    40	
    41	int     cur_col;
    42	int     cur_l_type;
    43	
    44	int     chrx_d  = 8;
    45	int     chry_d  = 16;
    46	int     crtbias = 0;
    47	
    48	int     c_blink;
    49	int     c_det;
    50	int     c_esc;
    51	int     CC;
    52	int     kpf;
    53	
    54	/*-------- まだまだ続く、どこまでも --------*/


 
リスト5−6 glbdata.ext mktable.cのextern宣言

     1	/****************************************/
     2	/*      グローバル変数の外部宣言        */      
     3	/****************************************/
     4	
     5	extern  short   delng_flg;
     6	extern  short   cmdng_flg;
     7	
     8	extern struct   {
     9	        double  x;
    10	        double  y;
    11	        double  w;
    12	        double  pst;
    13	}Scale;
    14	
    15	extern struct   {
    16	        short   col;
    17	        short   no;
    18	        short   id;
    19	        short   subid;
    20	        short   lay;
    21	}cur_p;
    22	
    23	extern  short   cur_col;
    24	extern  short   cur_l_type;
    25	
    26	extern struct   line {
    27	        double  sx;
    28	        double  sy;
    29	        double  ex;
    30	        double  ey;
    31	        short   arw;
    32	} line, line2;
    33	
    34	extern struct   circle{
    35	        double  cx;
    36	        double  cy;
    37	        double  r;
    38	        double  sang;
    39	        double  eang;
    40	} circ, circ2, enko;
    41	
    42	
    43	extern  short   chrx_d;
    44	extern  short   chry_d;
    45	extern  short     crtbias;
    46	
    47	
    48	extern short    c_blink;
    49	
    50	extern double   c_grid;
    51	
    52	extern short    c_det;
    53	
    54	extern short    c_esc;
    55	extern short    CC;
    56	extern short    kpf;
    57	
    58	/*-------- まだまだ続く、どこまでも --------*/

O'Reilly Japan刊

3/14発売
増刷:第3刷決定♪

オープンソース
Scheme言語処理系
Gaucheの愛好者団体

詳細はブログで


それぞれ2つのファイルは対になっていて、一方で実体の宣言し、他方でextern宣言(外部参照) しています。

では、どこが問題でしょうか。もしかして、あなたもこのようなヘッダーファイルの書き方をし ていると問題です。療法を読み始める前に、自分で問題点と思われることを考えてください。きち んと字下げや改行をしていないことだけではありません。


Copyright1996 Hirofumi Fujiwara. No reproduction or republication without written permission
『Cプログラミング診断室』
目次次(第5章 管理は複雑に ほとんど同じ)