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

如何让编译器将'a'识别为char类型,使_Generic相关表达式为真?

让字符常量'a'的类型为char而非int的实现方式

在C标准中,字符常量的默认类型是int,这是标准明确规定的行为,所以GCC默认下_Generic('a', char : true, default : false)会返回false。要实现你要的效果,有两种可行方式:

1. 使用C++编译器编译

C标准中字符常量的类型是char,直接用g编译代码,sizeof('a') == 1和_Generic('a', char : true, default : false)都会为真。

2. 在C语言中用宏强制转换

如果必须用C语言编译,可以定义一个宏来将字符常量强制转为char类型:

#define CHAR_LIT(c) ((char)c)

之后用CHAR_LIT('a')替代'a',此时:

sizeof(CHAR_LIT('a')) == 1 // 结果为真
_Generic(CHAR_LIT('a'), char : true, default : false) // 结果为真

需要注意的是,GCC没有专门的编译选项能让C语言的字符常量默认变为char类型——这会违反C标准的规定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:41:00