Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91763
  • 博文数量: 55
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 16
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-17 00:28
文章分类

全部博文(55)

文章存档

2014年(1)

2013年(54)

我的朋友

分类: 嵌入式

2013-09-10 00:55:30

一: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+行数--清楚断点;

 
阅读(425) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~