首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SDCC / GBDK,将结构数组传递给函数

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

Stack Overflow用户
提问于 2019-01-29 08:01:26
回答 1查看 321关注 0票数 0

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

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

当我传递结构数组时,我得到一个错误,如下所示,但是,如果我完全删除函数定义,只剪切并粘贴整个函数体,而不是函数调用,则代码将顺利编译和运行。

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

代码语言:javascript
复制
// 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编译器进行编译时,我得到以下错误:

代码语言:javascript
复制
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

当我删除对函数的调用,并简单地剪切并粘贴完整的函数体来代替函数调用时,它就会顺利编译,然后我就会得到一个很好的随机小游戏图块图。

这里可以看到一张图片,因为我没有图片的代表:

TestgameScreen

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-29 14:07:42

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54412044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档