找回密码
 立即注册
楼主: 王昱顺

自研C语言编译器发布,STC IDE —— 面向STC32系列及AI8051U的C语言编译器,11/7更新

 火.. [复制链接]

49

主题

612

回帖

5462

积分

荣誉版主

积分
5462
发表于 2026-8-12 08:56:05 | 显示全部楼层
另外,既然现在时测试阶段,能不能在菜单栏或者工具条上,临时加一个指向这个帖子的问题反馈按钮,省得每次找链接打开这个帖子

点评

OK,下次更新加上  详情 回复 发表于 2026-8-12 10:20
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

49

主题

612

回帖

5462

积分

荣誉版主

积分
5462
发表于 2026-8-12 09:11:02 | 显示全部楼层
试了下【格式化】功能,格式缩进功能完美~~~

截图202608120903085096.jpg 截图202608120902277127.jpg

顺便,
Arduino IED 的格式化功能,是按照一个标准,把缩进、等号前后空格,括号里的前后添加空格等等,一股脑进行格式化;
Keil的格式化插件里则是可以通过命令行,对需要格式化哪些方面、缩进量是多少等等进行手动设置。

所以等之后不忙的时候,看看能不能也完善一些其它的格式化功能。命令行的方式太麻烦,可以用像【设置】那样的窗口进行自定义。
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

已绑定手机

3

主题

51

回帖

1050

积分

金牌会员

积分
1050
发表于 2026-8-12 09:31:05 | 显示全部楼层
这是中国人的编译器,能不能把代码替换成中文,例如:if替换成  如果,for替换成  循环,

点评

个人认为不需要这么改。 从逻辑角度看,for 换成 “循环”,那 while 和 do while 要换成什么呢? 再看输入效率,if 键盘敲两下,“如果”要敲至少六下。 除非智能输入法习惯了输入,可以用缩写,比如“rg空格”,  详情 回复 发表于 2026-8-12 09:56
回复

使用道具 举报 送花

49

主题

612

回帖

5462

积分

荣誉版主

积分
5462
发表于 2026-8-12 09:56:42 | 显示全部楼层
shuan*** 发表于 2026-8-12 09:31
这是中国人的编译器,能不能把代码替换成中文,例如:if替换成  如果,for替换成  循环, ...

个人认为不需要这么改。

从逻辑角度看,for 换成 “循环”,那 while 和 do while 要换成什么呢?
再看输入效率,if 键盘敲两下,“如果”要敲至少六下。
除非智能输入法习惯了输入,可以用缩写,比如“rg空格”,那也是三下,而且相当于把敲击压力转移给了输入法。
中国人讲究的是实用和效率,繁体字统一成简体字就是例子。
把编程语言看成是跟机器交流的语言就好,只是一堆ASCII码符号,无关于中西。
倘若那么在意,那么数字 12345 也都要换成“一二三四五”了。

最明显的例子,在叙述上面这段话的时候,为了跟要说的话区分开,替换的内容都要用双引号框起来,否则就会产生歧义。
比如: “如果”要敲至少六下  是一个完整的陈述句,而 如果要敲至少六下 就成了推断语句的前半句话。
这显然大大降低了交流的效率。

能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

49

主题

612

回帖

5462

积分

荣誉版主

积分
5462
发表于 2026-8-12 10:08:23 | 显示全部楼层
发现一个BUG

创建了一个八个字节的数组
里面填了八个数据
然后试着又追加了八个数据
正常应该有错误提示,(比如Keil会提示  'array': too many initializers),想看看中文错误提示是啥样
结果却编译通过了。


截图202608121002542527.jpg


追加之前只有八个字节的时候
“编译成功:代码 924 B  ROM 0.70% ……”

追加八个字节之后
“编译成功:代码 964 B  ROM 0.74% ……”



说明多出来的数据没有被丢掉。
截图202608121007135576.jpg

截图202608121007313271.jpg

点评

确实发现了一些问题,例如超出数组以后还是会实际写入并且占用掉一些空间(没有对越界进行处理),但是好在整体布局上还是合理的,就算越出去变量占了空间,新增的其他变量也不会重叠覆盖,下个更新将会修复这个问题  详情 回复 发表于 2026-8-12 10:40
这个应该是静态检查写的还不完善,因为错误检查系统还没有写很多,大部分错误都是直接忽略掉 例如引用了一个不存在的 头文件,也是不会有问题的(只要没使用这个头文件) 这部分其实就是出现问题以后的默认行为,目  详情 回复 发表于 2026-8-12 10:25
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

已绑定手机
已实名认证

148

主题

4104

回帖

1万

积分

超级版主

积分
11138
 楼主| 发表于 2026-8-12 10:20:25 | 显示全部楼层
大*** 发表于 2026-8-12 08:56
另外,既然现在时测试阶段,能不能在菜单栏或者工具条上,临时加一个指向这个帖子的问题反馈按钮,省得每次 ...

OK,下次更新加上
回复

使用道具 举报 送花

已绑定手机
已实名认证

148

主题

4104

回帖

1万

积分

超级版主

积分
11138
 楼主| 发表于 2026-8-12 10:25:36 | 显示全部楼层
大*** 发表于 2026-8-12 10:08
发现一个BUG

创建了一个八个字节的数组

这个应该是静态检查写的还不完善,因为错误检查系统还没有写很多,大部分错误都是直接忽略掉
例如引用了一个不存在的 头文件,也是不会有问题的(只要没使用这个头文件)
这部分其实就是出现问题以后的默认行为,目前暂时是忽略掉这样子
回复

使用道具 举报 送花

已绑定手机
已实名认证

148

主题

4104

回帖

1万

积分

超级版主

积分
11138
 楼主| 发表于 2026-8-12 10:40:49 | 显示全部楼层
大*** 发表于 2026-8-12 10:08
发现一个BUG

创建了一个八个字节的数组

确实发现了一些问题,例如超出数组以后还是会实际写入并且占用掉一些空间(没有对越界进行处理),但是好在整体布局上还是合理的,就算越出去变量占了空间,新增的其他变量也不会重叠覆盖,下个更新将会修复这个问题

点评

追加问题,还是这个程序 数组是一维数组的时候 unsigned char led_state[8] = { RED, GREEN, RED, GREEN, RED, GREEN, RED, GREEN, /* 0, 01010101 */ }; 逐一判断 led_state[n] 的值,发送给八颗LED的P2端口  详情 回复 发表于 2026-8-12 10:56
回复

使用道具 举报 送花

49

主题

612

回帖

5462

积分

荣誉版主

积分
5462
发表于 2026-8-12 10:56:07 | 显示全部楼层
王*** 发表于 2026-8-12 10:40
确实发现了一些问题,例如超出数组以后还是会实际写入并且占用掉一些空间(没有对越界进行处理),但是好 ...

追加问题,还是这个程序


数组是一维数组的时候
unsigned char led_state[8] = {
    RED, GREEN, RED, GREEN, RED, GREEN, RED, GREEN, /* 0, 01010101 */
};
逐一判断 led_state[n] 的值,发送给八颗LED的P2端口,可以按照 红绿红绿红绿红绿 点亮正常。

然后改成了二维数组
unsigned char led_state[][8] = {
    RED, GREEN, RED, GREEN, RED, GREEN, RED, GREEN, /* 0, 01010101 */
    GREEN, RED, GREEN, RED, GREEN, RED, GREEN, RED, /* 1, 10101010 */
};
先逐一读取 led_state[0][n] ,结果 P2 的八个口输出都是 “RED”
再逐一读取 led_state[1][n] ,结果 P2 的八个口输出都是 “GREEN”


相同代码用KEIL编译,可以分别点亮 “红绿红绿红绿红绿” 和 “绿红绿红绿红绿红”

、、、、、、、、、、、、、、、

另外,完整代码都是AI助手写的,用到了定时器中断,AI助手在中断函数和main函数里,都声明了一个变量 unsigned char i,但是都没有用上。
结果也是,STC IDE 没有提示,而KEIL则提示两处 warning C47: 'i': unreferenced local variable。




点评

好的,我看看这部分的实现  详情 回复 发表于 2026-8-12 10:59
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

已绑定手机
已实名认证

148

主题

4104

回帖

1万

积分

超级版主

积分
11138
 楼主| 发表于 2026-8-12 10:59:40 | 显示全部楼层
大*** 发表于 2026-8-12 10:56
追加问题,还是这个程序

好的,我看看这部分的实现

点评

问题应该就是出在二维数组上 刚刚把数组 led_state[][8] 改成了一个变量 led_state。 直接给 led_state 赋值,然后逐一判断变量的每个位。 在 led_state = 0x55 和 led_state = 0xAA 的时候 用STC IDE编译之后也可  详情 回复 发表于 2026-8-12 11:26
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-11-14 09:28 , Processed in 0.078834 second(s), 83 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表