功能签名困惑

时间:2013-04-12 13:14:47

标签: c

所以我正在把PRBoom移植到手臂上,我可以跨越一个问题......

有以下代码....

R_DrawColumn_f R_GetDrawColumnFunc(enum column_pipeline_e type,
                               enum draw_filter_type_e filter,
                               enum draw_filter_type_e filterz) {
  R_DrawColumn_f result = drawcolumnfuncs[V_GetMode()][filterz][filter][type];
  if (result == NULL)
    I_Error("R_GetDrawColumnFunc: undefined function (%d, %d, %d)",
        type, filter, filterz);
  return result;
}

哪个产生

  

04-12 12:58:45.970:E / DJNI(16943):系统错误:R_GetDrawColumnFunc:未定义的函数(2,1,0)

所以我的理解是drawcolumnfuncs方法会变得混乱。但这里是我挣扎的地方,我不确定这个功能sig在做什么......

static R_DrawColumn_f drawcolumnfuncs[VID_MODEMAX][RDRAW_FILTER_MAXFILTERS][RDRAW_FILTER_MAXFILTERS][RDC_PIPELINE_MAXPIPELINES] = {
{
  {
    {NULL, NULL, NULL, NULL,},
    {R_DrawColumn8_PointUV,
     R_DrawTLColumn8_PointUV,
     R_DrawTranslatedColumn8_PointUV,
     R_DrawFuzzColumn8_PointUV,},
    {R_DrawColumn8_LinearUV,
     R_DrawTLColumn8_LinearUV,
     R_DrawTranslatedColumn8_LinearUV,
     R_DrawFuzzColumn8_LinearUV,},
    {R_DrawColumn8_RoundedUV,
     R_DrawTLColumn8_RoundedUV,
     R_DrawTranslatedColumn8_RoundedUV,
     R_DrawFuzzColumn8_RoundedUV,},
  },
...

看起来它只是制作HashMap的C版本,但为什么它会返回null呢?

1 个答案:

答案 0 :(得分:3)

这不是一个功能,先生,只是一个阵列。

它在这个数组中说如果第二个索引为零,则其所有内容都为NULL。它的第二个索引是你函数的第三个参数,恰好是零。

这意味着您的函数使用错误的参数调用R_GetDrawColumnFunc