C99语法之新增类型_Bool

  在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 }

结果如下:

 

 

反汇编结果如下:

    _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

 

posted on 2014-12-09 20:56  ECN14  阅读(529)  评论(0编辑  收藏  举报

导航