Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188647
  • 博文数量: 54
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2018
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-31 23:14
文章存档

2014年(2)

2013年(52)

分类: 嵌入式

2013-08-15 16:19:21

一: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) |
给主人留下些什么吧!~~