我试图将一对结构数组传递给C语言中的函数。
在使用GBDK为Gameboy进行编译时,我必须使用SDCC编译器。
当我传递结构数组时,出现如下所示的错误,但是,如果我完全取出函数定义并只是剪切并粘贴整个函数体来代替函数调用,则代码将编译并运行
为简洁起见,我只包含相关的代码。
// Struct definitions
struct point {
UINT16 x, y;
INT8 h;
INT8 h_tot;
};
typedef struct point Point;
Point layer1[25];
Point layer2[49];
// Function declarations
void createMap2();
void updateLayers( Point layer2[], Point layer1[], UINT16 limLo, UINT16 limHi, UINT16 limLast, INT8 layer );
void createMap2(){
UINT16 limLo = 0;
UINT16 limHi = 7;
UINT16 limLast = 5;
INT8 layer = 2;
updateLayers( layer2, layer1, limLo, limHi, limLast, layer );
// do more stuff
}
void updateLayers( Point layer2[], Point layer1[], UINT16 limLo, UINT16 limHi, UINT16 limLast, INT8 layer ){
// Do things within function
}
当我尝试使用GBDK和SDCC编译器进行编译时,出现以下错误:
C:\Users\terri\gbdk\testgame>..\bin\lcc -V -Wa-l -Wl-m -Wl-j -DUSE_SFR_FOR_REG -c -o testgame.o testgame.c
testgame.c(457):error *** Actual Argument type different from declaration 1
当我删除对函数的调用,并简单地剪切并粘贴完整的函数主体来代替函数调用时,它可以顺利编译,并且我得到了一个很好的随机的游戏男孩图块。
在这里可以看到一张图片,因为我没有图片代表:
答案 0 :(得分:0)
您可能需要将Point *传递给函数而不是Point [],并且可能需要传递数组的长度或使用一些定值终止它们。较早的编译器不接受带括号的表示法。我什至没有意识到他们现在会接受这一点。
这些年来,东西已经添加到C中,但是编译器多年来一直不支持它们。我记得编译器抱怨int [5]和int [10]是不同的类型,尤其是在函数参数方面。将数组传递给变量时,我几乎总是使用指针类型和长度。无论如何,我很确定这是您的问题。