← 都来码← 文档索引C++原文English

C++

与 C 同一套接口,可以写类。适合把游戏逻辑整理成对象。

在手机上怎么跑

vml run examples/cpp/test/sysinfo.cpp

编译要等一会儿(C 那种要一两分钟,脚本类语言几秒)。程序跑起来后屏幕底部就是手柄,方向键 + 四个动作键都在;点右上角返回可以回到命令行。

写法要点

示例

文件演示什么
app/snake.cpp贪吃蛇
test/sysinfo.cpp设备信息

同目录还有:app/1945.cpp、app/gorilla.cpp、app/minesweeper.cpp、bgi/demo_bgi.cpp、bgi/test_bgi.cpp、demo/demo_std.cpp、test/libs.cpp、tty/demo_tty.cpp、ui/demo_ui.cpp


下面的内容是从 VML 源码里直接带的(third_party/vml/VMLPrepares/CppCompiler/): README 讲这个前端支持什么、怎么编;语言规范 讲语法本身。上游一改,这里重新生成就是最新的。

语言规范

C++ 语言编译器规范说明

版本:v1.1 | 日期:2026-07-06 | 修订者:深圳市探索智能科技有限公司

规范标准

字段值
目标标准C++11 子集 (ISO/IEC 14882:2011)
发布年份2011
完成度~95%
MCU完成度~93%
测试0 (测试目录待创建)
更新2026-05-18: 修正目标标准为C++11(含nullptr/constexpr/override);修正完成度和测试数

关键字

C 子集全部关键字 + C++ 扩展: class new delete this virtual override public private protected namespace using template typename try catch throw typeid dynamic_cast static_cast const_cast reinterpret_cast bool true false nullptr friend operator explicit mutable inline constexpr

支持的功能 (C++11 子集)

基础特性
面向对象
高级特性
标准库

浮点与64位编译模式

VML 工具链通过三个编译参数控制浮点和 64 位整数的处理策略:

参数可选值默认值说明
--float32hard / soft / nonehard32位浮点 (float) 处理模式
--float64hard / soft / nonesoft64位浮点 (double) 处理模式
--int64hard / soft / nonesoft64位整数 (long long) 处理模式
32位浮点 (float32)

本语言中的 32 位单精度浮点类型 float 按以下模式编译:

64位浮点 (double)

本语言中的 64 位双精度浮点类型 double 按以下模式编译:

64位整数 (int64)

本语言中的 64 位整数类型 long long 按以下模式编译:

软件模拟库

以上软件模拟库均位于 Lib/shared/ 目录,使用 C 语言编写并由 C 编译器编译为 VML,所有语言共享:

库文件用途核心函数
softfloat.cQ15.16 定点数 32 位浮点模拟__vml_float_add/sub/mul/div/neg/abs/cmp、__vml_int2float/float2int
softdouble.cIEEE 754 双精度 64 位浮点模拟__vml_double_add/sub/mul/div/neg/abs/cmp、__vml_int2double/double2int、__vml_float2double/double2float
softint64.c64 位整数双寄存器模拟__vml_i64_add/sub/neg/and/or/xor/not/shl/shr

精度说明


🆕 字符串类型 (v1.65.19)

该语言编译器默认使用 .wstring (UTF-16LE) 作为内部字符串存储。

模式默认编码VML 伪指令SYSCALL 输出
MCU (默认).string (UTF-8).string#1
OS.wstring (UTF-16LE).wstring#391

预定义宏: VML_WSTRING — OS 模式下自动定义,MCU 模式未定义 输出函数: OS 模式自动使用 shared_print_wstr (UTF-16LE→UTF-8 自动转换)

// 用户代码可通过宏判断编码
#ifdef VML_WSTRING
  // 默认字符串为 wstring (UTF-16LE)
#else
  // 默认字符串为 UTF-8
#endif

🆕 预处理器指令 (v1.65.19)

C++ 编译器继承 C 编译器的全部预处理器功能:

指令说明
#param lib("xxx")自动链接指定库
#param path("xxx")添加 include 路径
#param prefix("xxx")函数名前缀(多语言库)

配合 -D VML_PREFIX=xxx 命令行参数,同一 C/C++ 源码可为不同语言生成不同前缀的库。详见 C_LANGUAGE_SPEC.md。

编译器 README

C++11 编译器

路径: VMLPrepares/CppCompiler/ 完成度: ~95% | 🟢 生产可用 标准库: Lib/cpp/

功能

编译模式

MCU 模式(默认 --mode mcu)

MCU 模式针对单片机/裸机环境(Arduino/STM32/8051 等)优化,自动跳过不兼容操作系统的特性。

跳过(遇到这些语法不生成代码):

保留(由 BIOS 实现底层):

OS 模式(--mode os,预留)

OS 模式针对带操作系统环境(如 Linux 嵌入式、RTOS 等),届时支持全部语言特性(文件系统、多线程、异步、异常、反射等)。

RAM 级别
MCU 安全编码提示

使用

dotnet run --project VMLPrepares/CppCompiler input.Cp -o output.vml

测试

Test/Cp/ — 0 测试文件(测试目录待创建)