(문제)

1~4값을 입력받아 procA~procD함수를 호출하는 함수를 작성하시오.

 

#define n_A (0)

#define n_B (1)

#define n_C (2)

#define n_D (3)

 

static void sub(int cmd)

{

    switch(cmd)

    {  case n_A : procA( ); break;

        case n_B : procB( ); break;

        case n_C : procC( ); break;

        case n_D : procD( ); break;

     }

}

 

=>안정성이 아니라, 효율성때문에 함수포인터와 enum을 쓰는 겁니다. 일반적으로 상수의 범위가 작기 때문에 전처리기에서 상수를 처리하면, 용량을 많이 차지 할수 있는 부분이 있는 겁니다. 그래서 간단히 상수만을 선언하고 사용하기 위해서, enum을 쓰는게 훨씬 메모리를 아낄수 있는 부분입니다.

어떤 일을 비슷한 범위에서 하는데, 같은 함수를 정의하는게 상당히 좋지 않을 수 있습니다.

코드의 낭비를 줄이기 위해서 씁니다. 그래서 함수포인터는 쓰는 거지요. 임베디드 시스템에서는 주로 이렇게 쓰죠..

 

 

 

typedef enum

{  n_A = 0,

    n_B,

    n_C,

    n_D

};

 

static void sub(int cmd)

{

     static const struct t_convtbl

     {    int val;

           BOOL (* proc)(void);

      } convtbl[ ] = { { n_A, procA },

                            { n_B, procB },

                            { n_C, procC },

                            { n_D, procD }};

      if ((sizeof(convtbl)/sizeof(convtbl[0]))>cmd )

     {

           (*convtbl[cmd].proc)();

     }

}

 

 

펌) http://cafe.naver.com/cafec.cafe

'c or linux' 카테고리의 다른 글

[펌] Visual Studio 6.0의 라이브러리 링크  (0) 2005.11.05
c programming FAQs  (0) 2005.06.23
enumeration + function pointer  (0) 2005.03.16
define 문에서 do while 문 사용이유  (0) 2005.03.15
상수 포인터  (0) 2005.03.15
library  (0) 2005.03.13
Posted by 김용환 '김용환'

댓글을 달아 주세요