如何让编译器将'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
相关产品推荐
相关产品推荐

