ESP32Forth中如何在单词定义内使用解析输入的string单词?
ESP32Forth字符串变量定义问题的解决办法
你的问题源于Forth的编译逻辑:在冒号定义(: ... ;)内部,Forth会按顺序编译每一个单词。当你写64 string HW$ s" HelloWorld!" HW$ $!时,编译到第二个HW$时,这个变量还没被string命令创建出来,因此触发未定义单词错误。
以下是两种可行的解决方案:
方案1:提前定义全局字符串变量
先在冒号定义外部创建HW$,再在HelloWorld中使用:
64 string HW$ \ 预先创建64字节的全局字符串变量 : HelloWorld s" HelloWorld!" HW$ $! ; \ 此时HW$已存在,可正常编译
方案2:无命名内存分配(避免全局命名污染)
如果不想创建全局变量,可直接在单词执行时分配内存并操作:
: HelloWorld 64 ALLOT \ 分配64字节内存,栈顶保留内存首地址 s" HelloWorld!" OVER $! \ 将字符串写入内存,OVER保留首地址供后续使用 ;
注意:此方案每次执行HelloWorld都会分配新内存,多次执行可能导致内存泄漏,适合一次性使用的场景。
内容的提问来源于stack exchange,提问作者mcc
相关产品推荐
相关产品推荐

