You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C23标准中strchr的QChar*是什么?GCC/Clang是否支持?

疑问:C23中strchr()的/*QChar*/是什么?

cppreference展示了strchr()的如下原型:

char *strchr( const char *str, int ch );     (1)    
/*QChar*/ *strchr( /*QChar*/ *str, int ch ); (2) (since C23)

并针对第二个版本给出如下解释:

与(1)等效的泛型函数。设T为非限定字符对象类型。

  • 若 str 为 const T* 类型,则返回类型为 const char*。
  • 否则,若 str 为 T* 类型,则返回类型为 char*。
  • 其他情况行为未定义。

请问:

  • 这个 QChar* 是什么?它是一种新类型吗?
  • 如果是,GCC 和/或 Clang 是否已经支持它?我能否在自己的应用代码中使用它?

回答

1. /*QChar*/的本质

/*QChar*/不是实际存在的新类型,它是cppreference用来占位的注释写法,目的是示意这个位置是泛型字符类型参数。对应C23标准新增的strchr泛型版本,这里的类型可以是任意非限定的字符对象类型(比如unsigned char、signed char等),而非某个叫QChar的具体类型。

2. 编译器支持情况

  • GCC:从13版本开始部分支持C23的泛型字符串函数,包括strchr的泛型版本,编译时需要指定-std=c23或-std=gnu23选项。
  • Clang:从16版本开始提供对该特性的支持,同样需要启用-std=c23或-std=gnu23编译选项。

3. 应用代码中的使用

你完全可以在代码中使用这个C23的泛型版本,但注意:

  • 确保编译器版本符合上述要求,且开启C23标准编译选项。
  • 使用时直接传入合法的字符类型指针即可(比如unsigned char*),不需要写QChar这个占位符。
  • 必须遵循标准规定:传入的类型必须是非限定的字符对象类型,否则行为未定义。

内容的提问来源于stack exchange,提问作者Madagascar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:46:19