gpt4 book ai didi

c - SDCC/GBDK,将结构数组传递给函数

转载 作者:行者123 更新时间:2023-11-30 16:22:28 26 4
gpt4 key购买 nike

我正在尝试将一对结构数组传递给 C 中的函数。

我必须使用 SDCC 编译器,因为我正在使用 GBDK 为 Gameboy 进行编译。

当我传递结构数组时,出现如下所示的错误,但是,如果我完全取出函数定义并剪切并粘贴整个函数体来代替函数调用,则代码将编译并运行顺利。

为了简洁起见,我只包含相关的代码。

// 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

当我删除对函数的调用,并简单地剪切并粘贴完整的函数体来代替函数调用时,它就可以顺利编译,并且我得到了一个漂亮的随机小游戏图 block map 。

可以在此处看到图像,因为我没有图像代表:

TestgameScreen

最佳答案

您可能需要将 Point* 传递给函数而不是 Point[],并且您可能需要传递数组的长度或使用某些哨兵值终止它们。较旧的编译器不会接受带有括号的表示法。我什至没有意识到他们现在会接受这一点。

多年来,C 语言中已经添加了一些东西,但编译器通常多年来并不支持它们。我记得编译器提示 int[5] 和 int[10] 是不同的类型,特别是在函数参数方面。在将数组传递给变量时,我几乎总是使用指针类型和长度。不管怎样,我很确定这是你的问题。

关于c - SDCC/GBDK,将结构数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54412044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com