淺談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外面會做一個強迫類型轉換。