0

我想初始化一个数组。但是我在编译时有两个不同的初始值。所以我想在预编译时完成。我的代码是

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_LANGUAGELANG_1or 或LANG_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 回答