2010-11-04 59 views
0

我想初始化一個數組。 但編譯時有兩個不同的初始值。 所以我想在預編譯的時候做。 我的代碼是如何用預編譯器初始化一個數組在C編程語言

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 
}; 

但我得到這個錯誤: 「預期的表達」。 在數組末尾給出的錯誤。 那麼我該如何解決這個問題呢?

回答

2

幾個問題:

  1. 你有沒有定義的東西,如typedef unsigned char U8;類型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 
1

LANG_1和LANG_2是枚舉所以在procompile時間這個對象無效。 所以我用我的問題解決了整數值。 謝謝。