一:void foo(void){
unsigned int a = 6;
int b = -20;
(a+b > 6) ? puts("> 6") : puts("<= 6");
}
A)>6 B) <=6 C)-14 D)无法运行
答案是a+b>0;
这里有一个提升规则:
1,double
2,float
3,unsigned long
4,long
5,unsigned int
6,int ....char, short
向上提升,向左提升:1,char 与short相加:结果为int+int
2,int+unsigned int:结果为unsigned int+unsigned int
以此类推。
另外:四字节以内运算,统统提升为四字节;
char c,d,e;
sizeof(c+d)=4;
sizeof(c+d+e)=4;
***************************************************************
二:
printf输出:a++,使用后加;++a使用前加;
printf(“...”,++a,a,a++);对此作运算毫无意义,printf打印顺序依编译器而定,不同编译器有不同结果;
一些奇怪的现象是和编译器,硬件等相关的,这里有(short *)1+1=3等一些有趣现象。
**************************************************************
三:
使用gdb调试程序:现编写好a.c b.c c.c ....
1,gcc -g -o app *.c
2,gdb app可对程序进行调试,在指针程序中容易出现段错误segment fault!使用gdb r 选项程序直接跳到段错误处。
使用以下选项进行调试:
l---------------显示程序内容;
b + 行号----设置断点;
info b--------查看断点数;
r---------------运行程序;
n--------------下一步(不进子函数);
s---------------下一步(进子函数);
q---------------退出;
p+变量名----查看变量值;
finish----------结束循环,结束函数;
b + 函数名--设置函数断点;
c---------------继续执行到下一个断点;
clear+行数--清楚断点;
阅读(1212) | 评论(0) | 转发(2) |