找回密码
 立即注册
查看: 17728|回复: 538

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

 火.. [复制链接]
已绑定手机
已实名认证

148

主题

4098

回帖

1万

积分

超级版主

积分
10912
发表于 2026-8-8 14:49:48 | 显示全部楼层 |阅读模式

STC32 IDE —— 面向 STC32 系列及 AI8051U 的 C11编译器 及 IDE,支持 C11语言标准, 及部分 C23, 后续还会支持 STC8系列

2026/10/10 全面更新,欢迎帮忙测试 STC 全新国产 C11编译器,帮查错

STC IDE 是面向 STC32 系列(兼容 251 指令集)的纯浏览器C语言自研编译器 IDE:打开网页即可编写 C 代码、编译生成 HEX、SWD 在线下载与调试,无需安装任何本地工具链,支持C11, 离线可用。

说明:STC32 系列 MCU 并非 Intel 251 内核,两者完全不同——Intel 251 是 8 位总线 + 32 位指令集,而 STC32 是 32 位总线 + 兼容 251 指令集。本 IDE 的编译器正是基于 STC32 的 251 指令兼容特性自研实现,未来还可在此基础上扩展支持 RISC-V 等更多指令集。

STC IDE 点击此处访问

image.png

一、主要优点

  • 完全开源免费:源码完全开源,免费使用,无需担心版权问题
  • 官方原厂持续支持:由 STC 官方原厂持续更新维护
  • 编译速度快至ms级:编译全部在浏览器本地完成,无网络等待、无服务器排队,点击即出结果
  • 无需安装环境:不用装 Keil、不用配环境变量、不用管许可证,打开网页就能用
  • 纯浏览器运行:代码不出本机,无隐私顾虑
  • 离线可用:PWA 支持,加载一次后断网也能打开使用,在线时自动更新最新版本
  • 内置 SWD 下载与调试:编译后一键差分下载烧录(仅烧录变动部分)、全速运行,支持硬件断点 / 单步 / 运行到光标与变量监视,浏览器直连设备
  • 多文件支持:支持多 .c/.h 文件工程,文件夹导入保持原有目录结构,一键导入整个工程
  • 自带例程:内置 25 个 STC 官方实验箱例程(跑马灯 / RTC / ADC / PWM / I2C / SPI 等),均已实机验证通过
  • 纯中文界面:菜单、提示、编译信息全部中文,无语言门槛
  • 完整编译输出:汇编列表 / Intel HEX / 预处理结果 / 资源占用报告 / 错误行号定位,一应俱全

二、已经实现的功能

2.1 C 语言特性(基于 C11 语法,大部分特性已支持,支持部分C23特性)

  • 基础语法:变量、表达式、控制流(if/for/while/switch)、函数、数组、指针、宏、条件编译、include
  • C11 特性(大部分):for 内声明、// 注释、复合字面量基础用法等按需支持
  • 结构体与位域:struct / 位域 / 匿名位域、嵌套结构体成员访问
  • 数据类型:8/16/32/64 位整型(含 long long)、float/double 软浮点(IEEE754)、32 位乘除(MDU32 硬件加速),0b0011类二进制字面量写法支持
  • 编译期检查:数组越界、负数数组长度、实参个数、隐式窄化、移位超宽等问题编译期直接报错;支持 Keil _at_ 绝对地址定义
  • 标准库:printf / sprintf / snprintf 编译器内联展开(%d/%u/%x/%c/%s/%f/%ld),常用数学库(sqrt/sin/cos 等软实现)
  • 单片机扩展:
    • sfr / sbit / xfr 特殊寄存器
    • data / edata / xdata / code 存储类型
    • bit 位变量
    • 中断支持 interrupt N(向量表自动生成、ISR 现场保存、未用槽 RETI 保护)
    • 内置头文件 STC32G.H / AI8051U.H / STC32G144K246.H(完整寄存器定义,支持用户覆盖)

2.2 编译器实现

  • ANTLR 语法分析 + 自研语义分析 + IR 中间表示 + 251 指令集(Source 模式)指令编码
  • 优化较激进:常量折叠、死代码剔除、公共子表达式、字节组合直装、const 数组常量下标折叠、寄存器冲突精确判定等优化 Pass;大工程整体代码尺寸优于 Keil(30 个官方例程整体小约 15%),SFR/XFR 访问、中断向量表、短寄存器函数等场景超越 Keil;仅个别小函数仍可能略大于 Keil 最高激进优化
  • 中文字符串按 GB2312 / UTF-8 可选编码嵌入 flash(默认嵌入GB2312,与 Keil 默认行为一致)
  • 支持将核心代码编译为 .lib 库分发(保护源码)

2.3 Web IDE 功能

  • 代码编辑(CodeMirror:语法高亮 / 自动补全 / 括号匹配)
  • 多文件管理:新建 / 重命名 / 删除 / 导入文件 / 导入文件夹(保持目录结构) / 本地保存工程
  • 一键编译 + 输出面板(汇编 / HEX / 预处理 / 资源报告 / 编译信息,错误行号点击跳转定位)
  • SWD 下载调试:差分下载 / 全速运行(F8)/ 暂停 / 硬件断点 / 单步 / 运行到光标;调试面板变量监视(右键「添加到监视」)与寄存器查看;连接后自动识别芯片型号;可设「编译后自动 SWD 下载并运行」
  • 内置头文件查看:文件菜单一键查看 STC32G.H 等内置头文件(只读渲染、型号切换、一键复制)
  • AI 协作接口:window.ai_ctrl 自描述方法表(help() / getState()),其他的AI 助手可读写文件、编译、查询编译结果、控制 SWD 调试
  • HEX 下载(可自定义文件名)
  • 示例列表(25 个实验箱验证例程)
  • 中英文界面自动切换、中文编码设置
  • PWA 离线缓存

2.4 实机验证情况

  • 实验箱 80 个官方例程全部编译通过(01.2 跑马灯 ~ 45 内部 RTC),其中 25 个内置为示例
  • 45 例程(RTC)实机验证:RTC 中断正确使用 interrupt 36(STC32G RTC 中断向量号),显示动态、秒位跳动、串口 printf 输出正常
  • SWD 实机验证:差分下载、全速运行、硬件断点 / 单步 / 运行到光标、变量监视均经实验箱验证通过
  • 回归测试全绿:52/52 指令级 + 94/94 用例级 + 45/45 例程级 + 42/42 附加用例,内置 25 例程编译 25/25
  • 数学库、结构体位域、static 局部变量、指针 cast、浮点除法 / 浮点常量折叠、中断嵌套等均经实机验证

三、暂未实现的功能(已知限制)

项 现状
reentrant 关键字 未实现(重入函数已通过自动副本方式支持)
Keil 工程(.uvproj)解析 不支持;多文件工程直接用「导入文件夹」一键导入全部 .c/.h 即可
块级作用域 for 循环变量按函数级分配(无块作用域隔离)
C11 完整支持 语法基于 C11(ANTLR C11 文法),但尚未覆盖全部 C11 特性(如 _Generic、可变参数宏等),常用子集已可用
printf %f 精度 浮点输出精度有限(简单小数场景可用)
SWD 调试环境 需 Chrome/Edge 等支持 WebHID/WebUSB 的浏览器,首次连接需在页面点击授权;硬件断点为逻辑单断点(STC32G 最多 8 个)

持续迭代中,以上限制将逐步补齐。

四、使用教程

1. 加载例程

点击右上角「示例」按钮,从列表中选择任意实验箱例程即可加载。推荐先试:

  • 01.2-用P6口做跑马灯(最简入门)
  • 45-内部RTC时钟程序(RTC + 中断 + 数码管 + 串口打印,综合示例)

2. 编写 / 导入代码

  • 直接编辑:在编辑器中修改代码
  • 导入文件:文件 → 导入文件(Ctrl+O)选择 .c/.h
  • 导入文件夹:文件 → 导入文件夹,选择工程目录(多文件工程一键导入,保持原有目录结构)
  • 保存工程:文件 → 保存工程(存到浏览器本地,下次打开自动恢复)

3. 编译

点击「编译」按钮(或 F7):

  • 成功:下方输出面板显示汇编 / HEX / 资源报告(edata / xdata / code 占用)
  • 失败:「编译信息」标签页显示错误行号与原因,点击可跳转定位

4. 下载 HEX 并烧录

方式一:IDE 内置 SWD 下载(推荐)

  1. 调试面板点击「连接」——首次需在页面点击授权设备(Chrome/Edge 支持 WebHID/WebUSB 即可)
  2. 编译成功后点击右上角「运行」按钮(或按 F8)→ 自动差分下载并全速运行
  3. 也可在 设置 → SWD 调试 中开启「编译后自动 SWD 下载并运行」

方式二:HEX + STC-ISP

  1. 编译成功后点击「HEX」按钮下载 .hex 文件
  2. 打开 STC-ISP 下载软件,选择芯片 STC32G12K128、主频 24MHz
  3. 选择下载的 HEX → 点击下载 → 实验箱自动断电上电烧录

5. 调试

连接 SWD 后:

  • 点击代码行号左侧设置断点 → 点「运行」运行到断点自动暂停
  • 暂停后可单步执行 / 继续运行,或在代码上右键「运行到此处」
  • 调试面板可查看寄存器与全局变量(右键「添加到监视」/ 一键导入全部),值变化自动高亮

6. 串口调试

例程的 printf 输出:

  • PrintUart=2:串口 2(P4.6/P4.7)@115200
  • PrintUart=1:串口 1(P3.0/P3.1)@115200

用串口助手连接对应引脚即可看到输出(如 RTC 例程每秒打印 Year=2021,Month=12,...)。

7. 其他设置

  • 设置 → 中文编码:字符串嵌入 flash 的编码(GB2312 默认 / UTF-8)
  • 文件 → 保存到文件夹:导出工程文件到本地磁盘

五、技术参数

项 值
目标芯片 STC32G12K128 / STC32G8K64 / AI8051U / STC32G144K246(兼容 251 指令集)
总线架构 32 位总线(非 Intel 251 的 8 位总线)
字节序 大端(251 规范)
代码存储 Flash 最大 246KB(12K128 为 128KB,0xFE0000 ~ 0xFFFFFF)
数据存储 edata 最大 16KB / xdata 最大 128KB(12K128:edata 4KB / xdata 8KB)
复位入口 0xFF0000
发布包大小 约 680KB(含 25 例程)
浏览器 Chrome / Edge 等现代浏览器(SWD 需支持 WebHID/WebUSB)

STC IDE 由自研 STC32 系列编译器项目驱动(251 指令兼容,后续可扩展 RISC-V),持续迭代中。欢迎反馈问题与建议。

5 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

已绑定手机
已实名认证

148

主题

4098

回帖

1万

积分

超级版主

积分
10912
 楼主| 发表于 2026-8-18 18:04:18 | 显示全部楼层
STC32 IDE 简单教程 方便快速预览/了解 | C11 编译器 for STC32 - 做实验拿奖励@STCAI万能板,500元 国芯人工智能技术交流网站 - AI32位8051交流社区

已增加Windows本地版本,

联网可自动更新,
实际为调用WebView2内核,
目前仅适配Windows10/11
STC-IDE-AOT.zip (8.08 MB, 下载次数: 512)
(2026年9月3日更新)
(目前改用.NET10+AOT方式编译,
用于解决360等杀软误报病毒的问题,
实际上软件内并未编写危险操作)
截图202608191430318231.jpg
打开效果预览
截图202608181803074213.jpg 截图202608181803281755.jpg






回复

使用道具 举报 送花

已绑定手机
已实名认证

148

主题

4098

回帖

1万

积分

超级版主

积分
10912
 楼主| 发表于 2026-8-19 16:20:53 | 显示全部楼层
针对代码优化方面,与Keil比较下

编译同样的程序(跑马灯程序)
STC IDE编译结果为:162B   Keil C251编译结果为169B 基本持平
编译带有中断的程序时,STC IDE会产生大概500B(根据最大中断号的不同,有所变动)的中断保护区域
用于防止使能中断但是未定义中断函数时候的错误执行其他中断函数和跑飞到代码起始区域执行的问题
截图202608191617499171.jpg
如果不计入这部分NOP的影响(因为仅仅是保护作用),那么在普通程序上和Keil基本持平,部分场景下优于Keil的优化
例如同样编译PWM呼吸灯例程,STCIDE编译大小为1160B ,Keil编译大小为691B
如果减去实际中断内容(8B),则NOP保护区域大小为523B,实际有内容的区域为1160-523=637B,优于Keil
截图202608191637074894.jpg
截图202608191637109324.jpg
(例如,连续赋值场景会默认折叠为一句赋值,同样的代码,Keil需要40B,STC-IDE只需要4B)
截图202608191635046912.jpg


对于较大的程序来讲,目前和Keil相比还有差距,还在进行优化







回复

使用道具 举报 送花

已绑定手机
已实名认证

148

主题

4098

回帖

1万

积分

超级版主

积分
10912
 楼主| 发表于 2026-8-26 17:54:34 | 显示全部楼层
【STC32 IDE 编译器 2026年8月26日 更新汇总】

一、正确性修复(实机验证)
1. 中断函数提前 return 跑飞(裸 RET+不弹栈)——已修复
2. 指针 ++/-- 步进错误(u16/u32/结构体只 +1 字节)——已修复
3. typedef 指针强转((u16*)addr)不识别——已修复
4. 局部指针数组传参读到错值——已修复
5. 结构体初始化漏首成员——已修复
6. sizeof(&x) 表达式不支持——已修复
7. 宏函数误判导致编译崩溃(trim 错误)——已修复
8. 16 位返回值走内存拆装——已优化

二、新特性
- Keil _at_ 绝对地址定义(u8 var _at_ 0x100;)
- 编译期检查 5+1 项:负数数组长度、实参个数、隐式窄化、
  移位超宽、常量实参传播、const 数组越界(均报错/警告)

三、代码优化
- (u16)A<<8|B 字节组合直装:21 字节 → 6 字节
- 查表取反去除寄存器中转
- 16 位返回值不再拆装内存
- 寄存器分配 / 移位特殊化

四、其他
- SWD 断开/卡死三层防御 + 调试符号过期防御
- 防止因为未设置SWD调试模式或未连接MCU导致卡死
- SW 更新网络优先,修复"更新后刷新不生效"

回复

使用道具 举报 送花

已绑定手机

872

主题

1万

回帖

2万

积分

管理员

积分
25428
发表于 2026-8-8 15:07:40 | 显示全部楼层
STC32 IDE 简单教程 方便快速预览/了解 | C11 编译器 for STC32 - 做实验拿奖励@STCAI万能板,500元 国芯人工智能技术交流网站 - AI32位8051交流社区

STC32 IDE
,持续完善中,欢迎大家动手测试,

使用中遇到问题,大家 跟帖讨论,反馈,不要另外发帖。
我们会根据反馈,持续完善,争取一个月后进入实用阶段。

目前keil的工程基本都可以直接塞进去(有Keil Lib的不行),

目前测试范围的这些结构都是可以支持的,
包括局部变量声明位置也是没有要求的,
甚至函数都不必遵守先后调用顺序,
只要有都能调用到


STC8, 大家先用成熟的 SDCC 及 KEIL C51,
待我们完善 STC32编译器后再支持STC8








回复

使用道具 举报 送花

1

主题

12

回帖

115

积分

注册会员

积分
115
发表于 2026-8-8 15:29:40 | 显示全部楼层
C语言标准的发展是一个不断适应现代软件工程需求、提升代码安全性与可移植性的过程。以下是各个主要标准版本的核心演进与特性:
1. C89 / C90 (ANSI C):奠定基石这是C语言的第一个官方正式标准,由ANSI于1989年发布,次年(1990年)被ISO采纳为国际标准(ISO/IEC 9899:1990),因此也被称为C90。它的核心目标是结束早期C语言“各自为政”的混乱局面,统一语法和语义。
  • 引入函数原型:强制要求在函数调用前声明返回类型与参数类型,显著提升了编译期的类型检查能力,避免了隐式声明导致的运行时错误。
  • 新增关键字与类型:增加了 void 类型、const 和 volatile 限定符,以及枚举类型(enum)。
  • 标准化预处理器与标准库:全面规范了宏替换、条件编译等预处理器行为,并确立了 <stdio.h>、<stdlib.h> 等标准库的基本框架与接口契约。
  • 国际化初步支持:引入了宽字符(wchar_t)和区域设置(locale)相关函数。
2. C99:提升灵活性与现代感C99(ISO/IEC 9899:1999)在C89的基础上进行了大量改进,引入了许多现代编程语言的特性,极大地提高了编程的灵活性。
  • 语法与灵活性增强:
    • 支持 // 单行注释。
    • 允许在代码块的任意位置声明变量,不再局限于块的开头,并支持在 for 循环内声明循环变量(如 for(int i=0; ...))。
    • 引入指定初始化器(如 int a[10] = { [5] = 100 };)和复合字面量。
  • 新增数据类型与关键字:
    • 增加了 long long 整型、_Bool 布尔类型、_Complex 复数类型等。
    • 引入 inline(内联函数)、restrict(指针限定符,帮助编译器优化)关键字。
  • 可变长数组(VLA):允许使用变量作为数组长度(运行时决定),不过该特性在后续标准中被降级为条件性支持。
  • 预处理增强:支持可变参数宏(Variadic Macro),如 #define MY_LOG(...) printf(__VA_ARGS__)。
3. C11:拥抱并发与安全C11(ISO/IEC 9899:2011)是C语言历史上的重大演进,旨在回应多核并行、嵌入式实时系统及跨平台开发的迫切需求,标志着C语言向现代通用高性能语言的升级。
  • 原生多线程与并发支持:首次在语言标准层面定义线程模型,通过 <threads.h> 提供线程生命周期管理、互斥锁、条件变量等核心抽象;同时通过 <stdatomic.h> 提供原子操作,并严格定义了内存模型(Memory Model),为并发编程设定了语义边界。
  • 增强类型安全与编译期检查:
    • 引入 _Static_assert 静态断言,允许在编译阶段检查常量表达式,失败则触发编译错误。
    • 引入 _Generic 关键字,实现基于类型选择的编译期泛型编程机制,有效规避了 void* 泛型函数带来的类型安全隐患。
  • 强化底层控制与硬件交互:引入 _Alignas 和 _Alignof 关键字,支持精确的内存对齐控制,对高性能计算和SIMD向量化编程至关重要。
  • 提升代码健壮性与安全性:
    • 删除了不安全的 gets() 函数,并提供了带边界检查的可选安全函数接口(如 memcpy_s、strcpy_s 等)。
    • 支持匿名结构体与联合体,简化了内存布局的访问。
  • 国际化增强:正式采纳Unicode支持框架,明确定义了UTF-8编码,并将 char16_t 和 char32_t 纳入标准整数类型体系。
4. 后续演进:C17 与 C23
  • C17 (C18):于2017年发布,主要是对C11标准的缺陷修复和细节澄清,没有引入新的语言特性。
  • C23:最新的标准,进一步移除旧特性(如K&R风格函数定义),增加 typeof、nullptr 等新关键字,并引入新的属性语法和十进制浮点数类型等。


回复

使用道具 举报 送花

11

主题

148

回帖

1443

积分

金牌会员

积分
1443
发表于 2026-8-8 15:42:49 | 显示全部楼层
不错,不过希望把LIB加进去,可以不是KEIL LIB,要考虑这一情况。另外发现不能修改每个文件的编码格式

点评

已经有这个 lib 了。不过还没有在编译器上留出设置选项 编码格式统一为 UTF-8。左上角的设置可以切换编译时候所用的非 ASCII 字符使用编码。用于切换实际串口发送的编码格式,可以切换 UTF-8 或者 GB 2312  详情 回复 发表于 2026-8-8 15:51
微信qsssuv
回复

使用道具 举报 送花

已绑定手机
已实名认证

148

主题

4098

回帖

1万

积分

超级版主

积分
10912
 楼主| 发表于 2026-8-8 15:51:27 | 显示全部楼层
青穗*** 发表于 2026-8-8 15:42
不错,不过希望把LIB加进去,可以不是KEIL LIB,要考虑这一情况。另外发现不能修改每个文件的编码格式 ...

已经有这个 lib 了。不过还没有在编译器上留出设置选项
编码格式统一为 UTF-8。
左上角的设置可以切换编译时候所用的非 ASCII 字符使用编码。
用于切换实际串口发送的编码格式,可以切换 UTF-8 或者 GB 2312

回复

使用道具 举报 送花

已绑定手机

7

主题

115

回帖

3014

积分

论坛元老

积分
3014
发表于 2026-8-8 16:24:06 | 显示全部楼层
测试了几个例程,速度很快,很好用。

点评

帮用您自己的大型实战程序测试下,尽早发现我们需要改进的地方, 大家都没再发现问题,就可以放心使用了  详情 回复 发表于 2026-8-9 09:29
回复

使用道具 举报 送花

已绑定手机

32

主题

446

回帖

2867

积分

金牌会员

积分
2867
发表于 2026-8-8 16:37:34 | 显示全部楼层
有了网页版的STC IDE,网页版的下载器,Ai助手,方便太多了。
期待将这几部分打通,真正方便快捷,可聚可散。
近期好消息不断,加油!
学习MCU
回复

使用道具 举报 送花

已绑定手机

32

主题

446

回帖

2867

积分

金牌会员

积分
2867
发表于 2026-8-8 16:42:28 | 显示全部楼层
下一步是否出个网页版的USB/串口助手呢?
如果能实现网页版的AiCube-ISP中模拟仿真接口功能里的各项就更好了!
学习MCU
回复

使用道具 举报 送花

9

主题

771

回帖

5307

积分

论坛元老

积分
5307
发表于 2026-8-8 17:16:33 | 显示全部楼层
很不错,界面简洁清晰,坐等完善和离线版本.

点评

已直接可离线使用  详情 回复 发表于 2026-8-8 17:34
回复

使用道具 举报 送花

已绑定手机

63

主题

2167

回帖

3537

积分

论坛元老

积分
3537
发表于 2026-8-8 17:17:29 | 显示全部楼层

主流C语言特性编译器兼容性对照表

C标准 关键特性 GCC 支持情况 Clang 支持情况 MSVC 支持情况
C99 //单行注释 完整支持 完整支持 完整支持(即使在C89模式下也支持)
C99 long long类型 完整支持 完整支持 完整支持(早期作为非标准扩展支持)
C99 变长数组(VLA) 完整支持 完整支持 不支持(MSVC一直未实现该特性)
C99 指定初始化器 (如 .x=1) 完整支持 完整支持 ️ VS 2022 起才支持(旧版完全不支持)
C99 复合字面量 (如 (Point){1,2}) 完整支持 完整支持 ️ VS 2022 起才支持(旧版完全不支持)
C11 多线程支持 (<threads.h>) 完整支持 完整支持 不支持(微软建议使用Windows API或C++)
C11 泛型选择 (_Generic) 完整支持 完整支持 不支持
C11 静态断言 (_Static_assert) 完整支持 完整支持 完整支持(VS 2015+)
C11 原子操作 (<stdatomic.h>) 完整支持 完整支持 不支持
C17/C18 缺陷修复与规范澄清 完整支持 完整支持 完整支持(VS 2019+)

核心差异与跨平台避坑建议

  1. MSVC 的“C++优先”策略:微软在很长一段时间内将精力集中在C++标准的更新上,对C语言标准的支持相对滞后。特别是在 VS 2019 及之前的版本中,许多现代C语法(如复合字面量、_Generic)是无法编译的。
  2. 跨平台代码的“最大公约数”:如果你的项目需要同时在 Linux (GCC/Clang) 和 Windows (MSVC) 上编译,强烈建议避开 C99 的变长数组(VLA)和 C11 的 <threads.h>。对于泛型需求,可以使用宏和类型后缀来替代 _Generic。
  3. 构建系统的标准指定:为了确保不同开发环境下的行为一致,建议在 CMake 或 Makefile 中显式指定 C 标准。例如,使用 -std=c11(严格ISO模式)或 -std=gnu11(允许GNU扩展);在 MSVC 中则需配置 /std:c17。
  4. 利用宏进行特性检测:在编写跨平台代码时,可以通过预定义宏 __STDC_VERSION__ 来判断当前编译器所处的标准环境。例如,#if __STDC_VERSION__ >= 201112L 表示当前环境至少支持 C11,从而动态选择代码分支。

你目前的项目主要用哪个编译器?我可以帮你针对性地调整代码,避开兼容坑。

回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-11-7 10:15 , Processed in 0.087073 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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