0

配列を初期化したい。ただし、コンパイル時の初期値は2つあります。だから私はプリコンパイル時にそれをやりたいです。私のコードは

static const U8 userFont[8][8] =
{   
#if (LCD_LANGUAGE == LANG_1)
    { 0x0E, 0x09, 0x09, 0x1D, 0x09, 0x09, 0x0E, 0x00 }, 
    { 0x03, 0x0E, 0x11, 0x10, 0x10, 0x11, 0x0E, 0x00 }, 
    { 0x09, 0x06, 0x0F, 0x01, 0x02, 0x04, 0x0F, 0x00 }, 
    { 0x0E, 0x11, 0x10, 0x10, 0x15, 0x0E, 0x04, 0x00 }, 
    { 0x11, 0x0E, 0x11, 0x10, 0x10, 0x11, 0x0E, 0x00 }, 
    { 0x19, 0x06, 0x09, 0x04, 0x02, 0x09, 0x06, 0x00 }, 
    { 0x00, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03 },     
    { 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01 }      
#elif (LCD_LANGUAGE == LANG_2)
    { 0x0A, 0x00, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00 },     
    { 0x04, 0x00, 0x1E, 0x04, 0x04, 0x04, 0x1E, 0x00 },     
    { 0x0A, 0x00, 0x0E, 0x11, 0x11, 0x11, 0x0E, 0x00 },     
    { 0x0E, 0x11, 0x10, 0x10, 0x11, 0x0E, 0x04, 0x00 },     
    { 0x0F, 0x10, 0x10, 0x0E, 0x01, 0x1E, 0x04, 0x00 },     
    { 0x0E, 0x00, 0x0F, 0x10, 0x17, 0x11, 0x0F, 0x00 },     
    { 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03 },     
    { 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01 }  

#endif
};

しかし、私はこのエラーを受け取ります:「式が必要です」。配列の最後にエラーがあります。では、どうすればこの問題を解決できますか?

4

2 に答える 2

2

いくつかの質問:

  1. U8タイプを次のように定義しましたtypedef unsigned char U8;か?
  2. またはLCD_LANGUAGEのいずれかとして定義しましたか?LANG_1LANG_2

私が尋ねる理由は、以下のこの小さなスニペットがコンパイルされて正常に実行されるためです。

#include <stdio.h>
typedef unsigned char U8;
#define LCD_LANGUAGE LANG_1
static const U8 userFont[8][8] =
{
#if (LCD_LANGUAGE == LANG_1)
    { 0x0E, 0x09, 0x09, 0x1D, 0x09, 0x09, 0x0E, 0x00 },
    { 0x03, 0x0E, 0x11, 0x10, 0x10, 0x11, 0x0E, 0x00 },
    { 0x09, 0x06, 0x0F, 0x01, 0x02, 0x04, 0x0F, 0x00 },
    { 0x0E, 0x11, 0x10, 0x10, 0x15, 0x0E, 0x04, 0x00 },
    { 0x11, 0x0E, 0x11, 0x10, 0x10, 0x11, 0x0E, 0x00 },
    { 0x19, 0x06, 0x09, 0x04, 0x02, 0x09, 0x06, 0x00 },
    { 0x00, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03 },
    { 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01 }
#elif (LCD_LANGUAGE == LANG_2)
    { 0x0A, 0x00, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00 },
    { 0x04, 0x00, 0x1E, 0x04, 0x04, 0x04, 0x1E, 0x00 },
    { 0x0A, 0x00, 0x0E, 0x11, 0x11, 0x11, 0x0E, 0x00 },
    { 0x0E, 0x11, 0x10, 0x10, 0x11, 0x0E, 0x04, 0x00 },
    { 0x0F, 0x10, 0x10, 0x0E, 0x01, 0x1E, 0x04, 0x00 },
    { 0x0E, 0x00, 0x0F, 0x10, 0x17, 0x11, 0x0F, 0x00 },
    { 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03 },
    { 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01 }
#endif
};
int main (void) {
    printf ("0x%02x 0x%02x\n", userFont[0][0], userFont[2][2]);
    return 0;
}

生産:

0x0e 0x0f
于 2010-11-04T09:49:26.263 に答える
1

LANG_1 AND LANG_2 は列挙型であるため、プロコンパイル時にはこのオブジェクトは無効です。だから私は私の問題が解決された整数値に置き換えます。ありがとう。

于 2010-11-04T11:05:58.543 に答える