NevermindZZT / letter-shell

letter shell
MIT License
1.2k stars 437 forks source link

请教参数类型判断问题 #198

Open yanxicheung opened 2 weeks ago

yanxicheung commented 2 weeks ago

你好我注册了如下函数 int func(int i, char ch, char *str, float d) { float daniel = 123.456; printf("input int: %d, char: %c, string: %s float:%f\r\n", i, ch, str, d); return 100; } SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC), func, func, test);

走读代码,对回调函数时,类型判断不是很理解: int (*func)(size_t, size_t, size_t, size_t) = command->data.cmd.function; ret = func(params[0], params[1], params[2], params[3]);

params[3]是size_t类型,但里面存放的是float型的二进制数据 在给回调函数喂参数时,按我理解是按照size_t类型来解释内存数据的,最终转换成的应该也是个整数呢 怎么实际会变成float型呢?

还有个问题,我发现多加了行打印,实际调用func的时候,float型打印就不对了 int (*func)(size_t, size_t, size_t, size_t) = command->data.cmd.function; printf("%u, %u, %u, %u\n", params[0], params[1], params[2], params[3]); ret = func(params[0], params[1], params[2], params[3]);

NevermindZZT commented 2 weeks ago

浮点数据直接解析是大概率会有问题的,可以参考下这个 https://nevermindzzt.github.io/2020/04/17/letter-shell%E4%BB%A3%E7%90%86%E5%87%BD%E6%95%B0%E8%A7%A3%E6%9E%90/