使用Raylib开发光栅化3D渲染器时遇C编译错误求助
C语言Raylib光栅化渲染器编译错误排查
错误1:expected expression before 'point'
C语言不支持像C++那样用point(x, y)的构造函数语法初始化结构体,必须用C标准的复合字面量语法:(point){成员值1, 成员值2}。
你的代码里两处地方犯了这个错误:
triArea函数里的结构体初始化写法- 循环中
isInTri调用里的结构体传参写法
修正后的代码片段:
- 修正后的
triArea函数:
float triArea(point a, point b, point c) { point midPoint = (point){(a.x + b.x) * 0.5, (a.y + b.y) * 0.5}; float base = distance(a, b); float height = distance(midPoint, c); return base * height * 0.5; }
- 修正后的循环代码:
for (int x = 0; x < dx; x++) { for (int y = 0; y < dy; y++) { DrawPixel(x, y, getColor(0xffffff * isInTri( (point){x, y}, (point){100, 0}, (point){100, 100}, (point){0, 100} ))); } }
错误2:too few arguments to function 'isInTri'
这个错误大概率是第一个语法错误导致的连锁反应——编译器因为无法正确解析point(...)的语法,进而错误判断isInTri的参数个数。解决第一个错误后,这个问题通常会自动消失。
如果修正后仍出现该错误,请检查:
isInTri的函数声明和定义是否确实要求4个参数(point p, point a, point b, point c)- 调用
isInTri时是否确实传入了4个参数,有没有遗漏或括号配对错误
内容的提问来源于stack exchange,提问作者Astroloico
相关产品推荐
相关产品推荐

