硬汉嵌入式论坛

 找回密码
 立即注册
查看: 173|回复: 4
收起左侧

[Embedded Studio] SEGGER Embedded Studio 8.28版发布,重大更新支持C23/C++23

[复制链接]

26

主题

302

回帖

385

积分

高级会员

积分
385
发表于 前天 22:37 | 显示全部楼层 |阅读模式
Version 8.28Build
  • Updated segger-cc compiler to version 20.1.3
  • Updated the GCC/BINUTILS tools build to use the Arm GNU Toolchain 15.2.Rel1 source release (Arm only).
  • Fixed emBuild -show command line option.
  • Added -host command line option to emStudio/emBuild to enable host executables to be built with hosted gcc.
  • Added Environment Variables environment option.
  • Added default Auto to Indirect File Supported project property.
  • Added System Macros From Environment Variables environment option.
  • Added c23/c++23 to c/c++ language standards.
  • Fixed command line option supplied to segger-cc when Thread-Local Storage Pointer is CP15 (Arm only).
  • Revert thread localness of global locale pointer.
  • Fixed running pre/post build commands when analyze is used.
  • Fixed empty lines not being shown in the build log.
  • Added support for Cortex-M52 processor.
  • Added Analyze Headers project property.
  • Updated segger-ld to version 4.44.4.
  • Fixed elfdwarfdump -memory-usage option.
Debug
  • Fixed finding J-Link install directory on Windows installations when HKey Current User registry key is not set.
  • Fixed GDB target interface failing when a notification is received.
  • Added -host command line option to emStudio to enable host executable debugging using hosted gdb.
  • Added support for SYS_EXIT_EXTENDED semihosting operation.
  • Fixed supplying 64-bit addresses to Load File Address project property.
  • Fixed simulation of Armv8.1-M MVE asrl, lsll, lsrl immediate instructions.
Editor
  • Added Text Editor > Editing > Backspace Key Auto-unindent environment option.
  • Fixed delay while saving and no formatting of file when Text Editor > Save > Format On Save is set to Yes.
IDE
  • Added options to enable rotation and/or flipping of image to the frame buffer window.
  • Added cut/copy/paste for project properties and copy/paste for configuration folders displayed in the project explorer.
  • Added -debugstart and -closeondebugexit command line options to emStudio.
  • Improved text view scrolling when using a fine resolution mouse wheel or touch pad.
Licensing
  • Added support for floating licenses.

回复

使用道具 举报

26

主题

302

回帖

385

积分

高级会员

积分
385
 楼主| 发表于 前天 22:42 | 显示全部楼层
C23 标准(ISO/IEC 9899:2024)新增特性全解析
C23 是 C 语言自 2018 年 C17 以来的重大更新,于 2024 年正式发布,带来了大量现代语言特性,同时保持了 C 语言的简洁高效和系统级编程能力。以下是其核心新增标准的详细分类:



一、新关键字与常量
新增关键字
用途
示例

nullptr类型安全的空指针常量,替代NULL宏int* p = nullptr;
static_assert编译时断言,简化_Static_assertstatic_assert(sizeof(int) == 4, "32-bit required");
typeof获取表达式或变量的类型typeof(5) x = 10; // x是int类型
auto类型推导,仅用于对象定义auto i = 42; // i是int类型
constexpr编译期常量表达式,可用于变量定义constexpr double pi = 3.1415926535;
true/false布尔常量,正式成为关键字bool flag = true;






二、新数据类型
1. 位精确整数类型
  • 引入_BitInt(N)语法,支持任意位宽的整数(N 为 1~BITINT_MAXWIDTH)
  • 解决了固定宽度整数类型(如 int32_t)无法满足特殊位宽需求的问题
  • 示例:_BitInt(13) a = 4095; // 13 位整数,范围 0~8191

2. 十进制浮点数类型
  • 新增_Decimal32、_Decimal64、_Decimal128三种十进制浮点类型
  • 用于金融计算等需要精确十进制表示的场景,避免二进制浮点数的舍入误差
  • 对应的字面量后缀:DF(32 位)、DD(64 位)、DL(128 位)
  • 示例:_Decimal64 price = 19.99DD;

3. UTF-8 字符支持
  • 新增char8_t类型,明确表示 UTF-8 编码的字符
  • 统一了 UTF-8 字符串字面量的类型,改进国际化文本处理
  • 示例:const char8_t* str = u8"你好,世界";



三、语法与表达式增强
1. 二进制整数常量
  • 支持0b或0B前缀表示二进制数
  • 示例:int mask = 0b101010; // 等于十进制 42

2. C++ 风格属性语法
  • 标准化双括号属性语法[[attribute]],替代编译器扩展(如 GCC 的__attribute__)
  • 标准属性包括[[nodiscard]]、[[maybe_unused]]、[[deprecated]]、[[unsequenced]]等
  • 示例:[[nodiscard]] int compute(); // 提醒调用者检查返回值

3. 可变参数函数改进
  • 不再要求省略号前必须有命名参数
  • va_start宏不再需要第二个参数,使用更安全简单
  • 示例:
    [C] 纯文本查看 复制代码
    #include <stdarg.h>
    int sum(int count, ...) {
      va_list args;
      va_start(args, count); // 不再需要第二个参数
      // ...
    }











4. 复合字面量增强
  • 复合字面量可包含存储类说明符,改变其生命周期
  • 示例:static struct Point p = (struct Point){.x=1, .y=2};



四、内存安全与错误处理
1. 安全算术函数
  • 新增ckd_add、ckd_sub、ckd_mul三个安全算术函数,用于检测整数溢出
  • 示例:
    [C] 纯文本查看 复制代码
    #include <stdckdint.h>
    int a = INT_MAX, b = 1;
    int result;
    if (ckd_add(&result, a, b)) {
      // 处理溢出
    }











2. 边界检查接口
  • 标准库新增可选的边界检查接口,为字符串和内存操作提供安全替代方案
  • 包括strcpy_s、strcat_s、memcpy_s等函数,接受额外的缓冲区大小参数
  • 增强代码安全性,防止缓冲区溢出攻击

3. calloc函数改进
  • C23 要求calloc在检测到n*s溢出时返回空指针,提高内存分配安全性



五、预处理器与编译特性
1. 取消过时特性
  • 移除三字母词(Trigraph)支持,这些字符序列已很少使用
  • 不再支持 K&R 风格的函数定义,统一使用 ANSI C 风格

2. 预定义宏更新
  • __STDC_VERSION__更新为202311L,标识 C23 标准
  • 新增BITINT_MAXWIDTH宏,定义_BitInt的最大位宽



六、标准库增强
1. 新增标准头文件
  • <stdckdint.h>:包含安全算术函数声明
  • <stdbit.h>:提供位操作函数,如bit_width、countl_zero等
  • <stdalign.h>:标准化对齐相关宏

2. 字符编码函数
  • 新增mbrtoc8和c8rtomb函数,支持多字节字符与 UTF-8 的转换
  • 完善了 UTF-8 编码的标准库支持

3. 数学库改进
  • 扩展了数学函数的类型支持,包括十进制浮点数类型
  • 新增部分特殊函数,增强数值计算能力



七、其他重要改进
1. 数组与指针增强
  • 改进了const与数组的兼容性规则,支持更灵活的常量数组使用
  • 函数参数中的数组声明与指针声明的等价性更加明确

2. 结构体与联合体改进
  • 结构体成员初始化语法更灵活,支持指定初始化器的增强形式
  • 联合体成员的访问规则更加清晰,减少未定义行为

3. 泛型选择增强
  • _Generic关键字功能扩展,支持更复杂的类型匹配场景
  • 可用于实现类型安全的通用函数,减少重复代码



总结
C23 标准的核心特点是向现代编程语言靠拢,同时保持 C 语言的核心优势。它引入了类型安全、编译期计算、内存安全等现代特性,大大提升了开发效率和代码质量,使 C 语言在系统编程、嵌入式开发和高性能计算等领域继续保持竞争力。

需要注意的是,虽然 C23 标准已经发布,但不同编译器的支持程度可能不同。主流编译器如 GCC、Clang 和 MSVC 正在逐步实现完整的 C23 特性支持。
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121980
QQ
发表于 昨天 09:27 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

24

主题

144

回帖

216

积分

高级会员

积分
216
发表于 昨天 10:16 | 显示全部楼层
这些新的标准在不停的更新,我现在还在用 C99 标准。什么时候我才会用到这些新的标准?感觉没有换的需求或者说动力,比如安全相关的新接口目前我用不到;如果拿现在 S32K144 RTM SDK 或者 STM32 HAL SDK 直接选择新的 C 标准是否会出现编译不通过(或编译后无法使用)的情况?
回复

使用道具 举报

24

主题

144

回帖

216

积分

高级会员

积分
216
发表于 昨天 10:16 | 显示全部楼层
这些新的标准在不停的更新,我现在还在用 C99 标准。什么时候我才会用到这些新的标准?感觉没有换的需求或者说动力,比如安全相关的新接口目前我用不到;如果拿现在 S32K144 RTM SDK 或者 STM32 HAL SDK 直接选择新的 C 标准是否会出现编译不通过(或编译后无法使用)的情况?
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-4-10 13:06 , Processed in 1.457713 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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