以下是來自開源項目X264的代碼片段,當嘗試移植它以支持VS編譯器cl.exe
時,出現構建錯誤。 cl.exe
將[X264_PULLDOWN_22]
作爲lambda的開頭。因此,任何人都可以用C語言來解釋這一行的含義。爲什麼這段代碼通過編譯器並驗證代碼?
typedef struct
{
int mod;
uint8_t pattern[24];
float fps_factor;
} cli_pulldown_t;
enum pulldown_type_e
{
X264_PULLDOWN_22 = 1,
X264_PULLDOWN_32,
X264_PULLDOWN_64,
X264_PULLDOWN_DOUBLE,
X264_PULLDOWN_TRIPLE,
X264_PULLDOWN_EURO
};
#define TB PIC_STRUCT_TOP_BOTTOM
#define BT PIC_STRUCT_BOTTOM_TOP
#define TBT PIC_STRUCT_TOP_BOTTOM_TOP
#define BTB PIC_STRUCT_BOTTOM_TOP_BOTTOM
static const cli_pulldown_t pulldown_values[] =
{
/*WHAT DOES THIS LINE MEAN???, how can you assign to [X264_PULLDOWN_22]*/
[X264_PULLDOWN_22] = {1, {TB}, 1.0},
[X264_PULLDOWN_32] = {4, {TBT, BT, BTB, TB}, 1.25},
[X264_PULLDOWN_64] = {2, {PIC_STRUCT_DOUBLE, PIC_STRUCT_TRIPLE}, 1.0},
[X264_PULLDOWN_DOUBLE] = {1, {PIC_STRUCT_DOUBLE}, 2.0},
[X264_PULLDOWN_TRIPLE] = {1, {PIC_STRUCT_TRIPLE}, 3.0},
[X264_PULLDOWN_EURO] = {24, {TBT, BT, BT, BT, BT, BT, BT, BT, BT, BT, BT, BT,
BTB, TB, TB, TB, TB, TB, TB, TB, TB, TB, TB, TB}, 25.0/24.0}
};
這是一種形式的[指定的初始值](http://stackoverflow.com/q/763763/912144) 。 – Shahbaz
它沒有分配給X264_PULLDOWN_22,它創建一個cli_pulldown_t的靜態數組,並將索引X264_PULLDOWN_22設置爲{1,{TB},1.0} – paulm
將該文件重命名爲.c,並使用VS 2013對其進行編譯。 Microsoft僅在2013年才增加對C99構造的支持。 – dasblinkenlight