سؤال

لقد لاحظت أن نواة لينكس يستخدم رمز منطقي, ولكن أعتقد أنه منطقي كان 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، أو نوع عدد صحيح غير موقعة مع قيمة واحدة بت).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top