هو منطقي الأم ج نوع ؟
-
05-07-2019 - |
سؤال
لقد لاحظت أن نواة لينكس يستخدم رمز منطقي, ولكن أعتقد أنه منطقي كان C++ نوع.هو منطقي القياسية ج التمديد (مثل ISO C90) أو دول مجلس التعاون الخليجي التمديد ؟
المحلول
وbool
موجود في C الحالي - C99، ولكن ليس في C89 / 90
في C99 يسمى النوع الأصلي في الواقع _Bool
، في حين bool
هو ماكرو مكتبة القياسية المحددة في stdbool.h
(الذي يحل توقعات ل_Bool
). كائنات من نوع _Bool
عقد إما 0 أو 1، في حين true
وfalse
هي وحدات الماكرو أيضا من stdbool.h
.
ملحوظة، راجع للشغل، أن هذا يعني أن المعالج C ستفسر #if true
كما #if 0
ما لم يتم تضمين stdbool.h
. وفي الوقت نفسه، مطلوب C ++ المعالج الاعتراف أصلا true
كلغة حرفية.
نصائح أخرى
وأضاف C99 نوع بيانات _Bool
مدمج (انظر ويكيبيديا للحصول على مزيد من التفاصيل)، وإذا كنت #include <stdbool.h>
، فإنه يوفر bool
كما ماكرو ل_Bool
.
وسألت عن نواة لينكس على وجه الخصوص. فإنه يفترض وجود _Bool
ويوفر bool
typedef ونفسها في <لأ href = "http://lxr.linux.no/#linux+v2.6.31/include/linux/types.h#L34" يختلط = "noreferrer" > تشمل / لينكس / types.h .
لا يوجد bool
في ISO C90.
هنا قائمة من الكلمات الرئيسية في المعيار C (لا C99):
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
static
struct
switch
typedef
union
unsigned
void
volatile
while
وهنا مقال مناقشة بعض أخرى الخلافات مع ج كما تستخدم في النواة القياسية: http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/index.html
وC99 كانت عليه في stdbool.h ، ولكن في C90 يجب أن يعرف بأنه typedef وأو التعداد:
typedef int bool;
#define TRUE 1
#define FALSE 0
bool f = FALSE;
if (f) { ... }
وبدلا من ذلك:
typedef enum { FALSE, TRUE } boolean;
boolean b = FALSE;
if (b) { ... }
/* Many years ago, when the earth was still cooling, we used this: */
typedef enum
{
false = ( 1 == 0 ),
true = ( ! false )
} bool;
/* It has always worked for me. */
_Bool
هو الكلمة في C99:وهي تحدد نوع مثل int
أو double
.
6.5.2
2 كائن أعلن نوع _Bool كبيرة بما يكفي لتخزين القيم 0 و 1.
وC99 يعرف منطقي، true
وfalse
في stdbool.h
.
stdbool.h تم تقديمها في C99
وstdbool.h
يحدد وحدات الماكرو الصواب والخطأ، ولكن تذكر أنه يعرف إلى أن يكون 1 و 0.
وهذا هو السبب في sizeof(true)
هو 4.
لا شيء من هذا القبيل، وربما فقط ماكرو لكثافة العمليات
وC99 نوع bool
الذي دلالات تختلف جوهريا عن تلك التي فقط عن كل أنواع صحيحا التي كانت موجودة من قبل في C، بما في ذلك أنواع المعرفة من قبل المستخدم ومترجم والإرشاد المخصصة لهذه الأغراض، والتي بعض البرامج قد يكون "نوع -def "اد لbool
.
وعلى سبيل المثال، نظرا bool a = 0.1, b=2, c=255, d=256;
، فإن C99 نوع bool
تعيين كافة الكائنات أربعة إلى 1. إذا كان برنامج C89 يستخدم typedef unsigned char bool
، الكائنات سيحصلون 0، 1، 255، و 0، على التوالي. وإذا ما استخدمت char
، قد تكون القيم على النحو الوارد أعلاه، أو قد يكون c
-1. لو استخدمت bit
مترجم تمديد أو نوع __bit
، فإن النتائج من المرجح أن تكون 0، 0، 1، 0 (علاج bit
بطريقة يعادل-حقل بت غير موقعة من حجم 1، أو نوع عدد صحيح غير موقعة مع قيمة واحدة بت).