程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 淺談C說話編程中的布爾bool數據類型

淺談C說話編程中的布爾bool數據類型

編輯:關於C++

淺談C說話編程中的布爾bool數據類型。本站提示廣大學習愛好者:(淺談C說話編程中的布爾bool數據類型)文章只能為提供參考,不一定能成為您想要的結果。以下是淺談C說話編程中的布爾bool數據類型正文


我們曉得在C++裡有專門的bool類型,用來表現真或假。然則在C說話裡沒有如許的類型(至多我是一向這麼以為的),表達式的值0為假,非0為真。所以前提斷定語句( if(…)、while(…) )異常靈巧,乃至一個指針類型都可所以前提表達式。
  為了使法式更清楚,我們經常會給出以下的宏界說:

  typedef int BOOL;
  #define TRUE 1
  #define FALSE 0

  這是最多見的寫法,能被任何C說話編譯器承認。
  明天我在一段法式裡看見這麼一行 #include ,這個生疏的頭文件還以std打頭並且還和bool有關,惹起了我的警醒,連忙百度之。得知這是C99尺度新增的頭文件,意在引入bool類型,使之和C++兼容。隨後我看了一下這個頭文件的源代碼,內容以下:

  /*
  * ISO C Standard: 7.16 Boolean type and values
  */
  #ifndef _STDBOOL_H
  #define _STDBOOL_H
  #ifndef __cplusplus
  #define bool _Bool
  #define true 1
  #define false 0
  #else /* __cplusplus */
  /* Supporting in C++ is a GCC extension. */
  #define _Bool bool
  #define bool bool
  #define false false
  #define true true
  #endif /* __cplusplus */
  /* Signal that all the definitions are present. */
  #define __bool_true_false_are_defined 1
  #endif /* stdbool.h */

  這個頭文件很短,並且也很清楚明了,不外我對_Bool這個類型發生的興致。又一翻百度,發明這是C99尺度引入的新的症結字。對,是症結字,而不是宏界說,也不是typedef。經由過程sizeof(_Bool);得知這個類型占1個字節,並且不管給這個類型的變量賦任何非0整數值,其值都是1,這也解釋了他不是其他整數類型的別號。
  好了,其實說白了,C說話不是沒有布爾類型,只能說在C99尺度之前沒有。如今只需在源文件中包括stdbool.h這個頭文件,便可以在C說話裡像C++那樣應用bool類型了。
所以假如是C99之前的尺度,須要我們本身界說bool,如

typedef enum {false = 0, true = 1} bool;

那末我們就來看一下C說話中的相干界說:
1.FALSE/TRUE與false/true的差別: 
    false/true是尺度C++說話裡新增的症結字,而FALSE/TRUE是經由過程#define,這要用處
是處理法式在C與C++中情況的差別,以下是FALSE/TRUE在windef.h的界說:

#ifndef  FALSE 
#define  FALSE  0 
#endif 
#ifndef  TRUE 
#define  TRUE  1 
#endif 

也就是說FALSE/TRUE是int類型,而false/true是bool類型;所以二者紛歧樣的,只不外
我們在應用中沒有這類感到,由於C++會幫你做隱式轉換。
2.bool的年夜小與BOOL的差別:
bool在C++裡是占用1字節,而BOOL是int類型,int類型的年夜小是視詳細情況而定的;所以
來講:false/true只占用1個字節,而TRUE/FALSE視詳細情況而言,以下是BOOL在windef
.h中的界說:typedef   int   BOOL;
3.NULL與0的差別: 
    照樣讓我們看一下windef.h中NULL的界說:

#ifndef  NULL 
#ifdef  __cplusplus//這個是指導是用C++來編譯法式 
#define  NULL  0 
#else 
#define  NULL  ((void  *)0) 
#endif 
#endif 

所以說:它們沒有差別,只不外在C外面會做一個強迫類型轉換。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved