不能 return 静态数组

Can't return static array

可能是一个非常简单的问题,但我无法找出原因。所有给定的代码都在同一个文件中。

这是其中一个数组的定义。它是在每个方法之外定义的。

unsigned char KEY_40_COMPARE_VALUES[] = {
85,102
,119,134
,147,158
,165,169
,169,165
,158,147
,134,119
,102,85
,67,50
,35,22
,11,4
,0,0
,4,11
,22,35
,50,67
};

这是代码:

unsigned char * getCompareValuesForIndex(char index)
{
    if (index == 0)
    {
        return KEY_28_COMPARE_VALUES;
    }

    if (index == 1)
    {
        return KEY_30_COMPARE_VALUES;
    }

    if (index == 2)
    {
        return KEY_32_COMPARE_VALUES;
    }

    if (index == 3)
    {
        return KEY_33_COMPARE_VALUES;
    }

    if (index == 4)
    {
        return KEY_35_COMPARE_VALUES;
    }

    if (index == 5)
    {
        return KEY_37_COMPARE_VALUES;
    }

    if (index == 6)
    {
        return KEY_39_COMPARE_VALUES;
    }

    else
    {
        return KEY_40_COMPARE_VALUES;
    }
}

这是我得到的编译错误:

conflicting types for 'getCompareValuesForIndex'

当您在为函数提供原型并在其在文件中声明之前调用函数时,通常会发生此类错误。在这种情况下,编译器假定

  • 函数接受的任何参数都是 int
  • 类型
  • 函数returns的值是int
  • 类型

从本质上讲,函数对编译器来说是这样的:

int getCompareValuesForIndex(int index) { // <<= What compiler thinks
    ...
}

当编译器看到实际声明时,它会发出错误。

要解决此问题,请 (1) 在调用之前提供函数原型,或 (2) 将定义移至首次使用函数之前。

注意:解决了这个问题,考虑通过添加静态数组来优化您的函数,如下所示:

unsigned char *KEY_COMPARE_VALUES[] = {
    KEY_28_COMPARE_VALUES
,   KEY_30_COMPARE_VALUES
,   KEY_32_COMPARE_VALUES
,   KEY_33_COMPARE_VALUES
,   KEY_35_COMPARE_VALUES
,   KEY_37_COMPARE_VALUES
,   KEY_39_COMPARE_VALUES
};

现在你的函数可以这样重写:

unsigned char * getCompareValuesForIndex(char index) {
    return (index >=0 && index < 7) ? KEY_COMPARE_VALUES[index] : KEY_40_COMPARE_VALUES;
}