首页 > 代码库 > C99语法之新增类型_Bool

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

 

C99语法之新增类型_Bool