HolyC语言参数传递异常求助:向量计算结果不符预期
HolyC向量计算结果异常,变量值读取错误问题
问题描述
我在用类C的HolyC语言开发游戏时遇到异常:代码意图计算两个向量的方向向量,但实际输出的计算结果完全不符合预期,初始化的变量值打印出来也出现错误。
代码实现
class Vector2 { F64 x, y; }; U0 TargetVelocity(Vector2 a, Vector2 b, Vector2 *out) { "AX(%f) AY(%f)\n",a.x,a.y; "BX(%f) BY(%f)\n",b.x,b.y; F64 vx = b.x - a.x; F64 vy = b.y - a.y; "RX(%f) RY(%f)\n",vx,vy; F64 length = Sqrt(vx * vx + vy * vy); if(length != 0) { vx /= length; vy /= length; } "RX(%f) RY(%f)\n",vx,vy; out->x = vx; out->y = vy; } Vector2 testVector; testVector.x = 10; testVector.y = 20; Vector2 testVector2; testVector2.x = 10; testVector2.y = 40; Vector2 Velocity = {0.0, 0.0}; TargetVelocity(testVector, testVector2, &Velocity); "X(%f) Y(%f)\n",Velocity.x,Velocity.y;
实际输出
AX(10) AY(10) BX(10) BY(0) RX(0) RY(-10) RX(0) RY(-1) X(0) Y(-1)
明明初始化testVector.y=20、testVector2.y=40,打印结果却变成10和0,计算vy = b.y - a.y得到-10,完全不符合预期。
问题根源
你使用了错误的打印语法。在HolyC中,"格式化字符串", 参数1, 参数2;这种写法不是合法的打印调用,会被解析为逗号表达式求值,而非输出操作。这种错误写法会破坏栈帧布局,导致后续读取变量时拿到错误的内存值,最终出现异常的计算结果。
修复方案
将所有打印语句替换为HolyC标准的Print函数调用,修改后的代码如下:
class Vector2 { F64 x, y; }; U0 TargetVelocity(Vector2 a, Vector2 b, Vector2 *out) { Print("AX(%f) AY(%f)\n", a.x, a.y); Print("BX(%f) BY(%f)\n", b.x, b.y); F64 vx = b.x - a.x; F64 vy = b.y - a.y; Print("RX(%f) RY(%f)\n", vx, vy); F64 length = Sqrt(vx * vx + vy * vy); if(length != 0) { vx /= length; vy /= length; } Print("RX(%f) RY(%f)\n", vx, vy); out->x = vx; out->y = vy; } Vector2 testVector; testVector.x = 10; testVector.y = 20; Vector2 testVector2; testVector2.x = 10; testVector2.y = 40; Vector2 Velocity = {0.0, 0.0}; TargetVelocity(testVector, testVector2, &Velocity); Print("X(%f) Y(%f)\n", Velocity.x, Velocity.y);
预期输出
修复后变量值会被正确读取,计算结果符合预期:
AX(10) AY(20) BX(10) BY(40) RX(0) RY(20) RX(0) RY(1) X(0) Y(1)
补充说明
HolyC虽语法类似C,但IO操作有独立规范,必须显式调用Print函数完成输出,不能沿用C中隐式调用printf的错误写法(这种写法在标准C中同样不合法)。显式调用打印函数既能正确输出内容,也能避免栈帧异常导致的变量读取错误。
内容的提问来源于stack exchange,提问作者greg04
相关产品推荐
相关产品推荐

