码迷,mamicode.com
首页 > 其他好文 > 详细

C99语法之新增类型_Bool

时间:2014-12-09 21:25:23      阅读:341      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   sp   div   2014   

  在C99语法中新增加了_Bool 的布尔类型语法,例子如下:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 int main(int argc, char **argv)
 5 {
 6     _Bool b;
 7     b = 0;
 8     printf("%d\n", b);
 9     b = 1;
10     printf("%d\n", b);
11     b = 3;
12     printf("%d\n", b);
13     b = 4;
14     printf("%d\n", b);
15     printf("%d\n",sizeof(b));
16 
17     printf("%d\n",b);
18     getchar();
19     return 0;
20 }

结果如下:

 

bubuko.com,布布扣

 

反汇编结果如下:

    _Bool b;
    b = 0;
0119406E  mov         byte ptr [b],0  
    printf("%d\n", b);
01194072  movzx       eax,byte ptr [b]  
01194076  mov         esi,esp  
01194078  push        eax  
01194079  push        1195858h  
0119407E  call        dword ptr ds:[1199110h]  
01194084  add         esp,8  
01194087  cmp         esi,esp  
01194089  call        __RTC_CheckEsp (01191136h)  
    b = 1;
0119408E  mov         byte ptr [b],1  
    printf("%d\n", b);
01194092  movzx       eax,byte ptr [b]  
    printf("%d\n", b);
01194096  mov         esi,esp  
01194098  push        eax  
01194099  push        1195858h  
0119409E  call        dword ptr ds:[1199110h]  
011940A4  add         esp,8  
011940A7  cmp         esi,esp  
011940A9  call        __RTC_CheckEsp (01191136h)  
    b = 3;
011940AE  mov         eax,3  
011940B3  test        eax,eax  
011940B5  jne         main+73h (011940C3h)  
011940B7  mov         dword ptr [ebp-0D0h],0  
011940C1  jmp         main+7Dh (011940CDh)  
011940C3  mov         dword ptr [ebp-0D0h],1  
011940CD  mov         cl,byte ptr [ebp-0D0h]  
011940D3  mov         byte ptr [b],cl  
    printf("%d\n", b);
011940D6  movzx       eax,byte ptr [b]  
011940DA  mov         esi,esp  
011940DC  push        eax  
    printf("%d\n", b);
011940DD  push        1195858h  
011940E2  call        dword ptr ds:[1199110h]  
011940E8  add         esp,8  
011940EB  cmp         esi,esp  
011940ED  call        __RTC_CheckEsp (01191136h)  
    b = 4;
011940F2  mov         eax,4  
011940F7  test        eax,eax  
011940F9  jne         main+0B7h (01194107h)  
011940FB  mov         dword ptr [ebp-0D0h],0  
01194105  jmp         main+0C1h (01194111h)  
01194107  mov         dword ptr [ebp-0D0h],1  
01194111  mov         cl,byte ptr [ebp-0D0h]  
01194117  mov         byte ptr [b],cl  
    printf("%d\n", b);
0119411A  movzx       eax,byte ptr [b]  
0119411E  mov         esi,esp  
01194120  push        eax  
01194121  push        1195858h  
01194126  call        dword ptr ds:[1199110h]  
0119412C  add         esp,8  
0119412F  cmp         esi,esp  
01194131  call        __RTC_CheckEsp (01191136h)  
    printf("%d\n",sizeof(b));
01194136  mov         esi,esp  
01194138  push        1  
0119413A  push        1195858h  
0119413F  call        dword ptr ds:[1199110h]  
01194145  add         esp,8  
01194148  cmp         esi,esp  
0119414A  call        __RTC_CheckEsp (01191136h)  

从结果可以看出,不为0就为1;

从反汇编的结果也可以看出

    b = 4;
011940F2  mov         eax,4  
011940F7  test        eax,eax  
011940F9  jne         main+0B7h (01194107h)  
011940FB  mov         dword ptr [ebp-0D0h],0  
01194105  jmp         main+0C1h (01194111h)  
01194107  mov         dword ptr [ebp-0D0h],1  
01194111  mov         cl,byte ptr [ebp-0D0h]  
01194117  mov         byte ptr [b],cl  

b  = 4

mov eax,4

首相 4 给了eax;

test eax,eax

只要不为0 就为1

这个就是 _Bool 类型的内部机制。

                                                        by:ECN14

 

C99语法之新增类型_Bool

标签:style   blog   http   io   ar   color   sp   div   2014   

原文地址:http://www.cnblogs.com/ECN14/p/4154019.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!