三字母词(trigraph) && 整型提升
最近看了c的语言标准,因为很喜欢,但是无奈自己英文是个菜鸟.但是所幸看见了一个致力于c11的网站,上面讲到了三字母词,还要整型提升
三字母词
编译阶段将特定的几个三字母词替换为 一个词这里是表格
这应该属于历史原因,某些键盘或者设备没有对应字符的那些按键
比如
??=define P 3.14
//等价于
#define P 3.14
整形提升
c语言的整形 int以下的整形在进行运算是会提升为int的4字节,相关资料显示为cpu里的ALU单元,在32为以上(不严谨)不容易做8位运算,相关资料,需要提升为整形,但是我代码测试也发现了这个问题,上代码
//环境
gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)
centos7 x64
//代码
#include<stdio.h>
#define CHARB 0Xb6
#define SHORTB 0xb600
#define INTB 0Xb6000000
int main(void)
{
char a = CHARB;
short b = SHORTB;
int c = INTB;
if(a == CHARB){
printf("a is true\n");
}else{
printf("a is false\n");
}
if(b == SHORTB){
printf("b is true \n ");
}else{
printf("b is false \n");
}
if(c == INTB){
printf("c is true\n");
}else{
printf("c is false \n");
}
printf("%d\n" , sizeof(+a));
exit(0);
}
//output
a is false
b is false
c is true
4
这里有一个问题c是以编译器实现为准的,不要看见标准就以为一定会有,使用之前也要自己先进行测试.跨平台更要小心.