هل هناك فرق بين استخدام ل (؛؛) وبين (1)؟


الاجابه 1:

فيما يتعلق بالكود الذي تم إنشاؤه ، يجب أن يمنحك أي مترجم C حديث نفس النتائج.

المؤلفون والأستاذ وغيرهم ممن يقولون أن (؛؛) يولد المزيد من النفقات العامة إما (أ) لا يعرفون ما الذي يتحدثون عنه ، أو (ب) يعملون مع المترجمين القدامى أو المكسورين. من أجل (؛؛) لا تنشئ أي حمل إضافي ، لأنه لا يوجد شرط ولا يخطو متغير متغير حلقة. إذا كان هناك أي شيء ، في حين أن (1) في برنامج التحويل البرمجي القديم غير الأمثل قد ينتج فعليًا مزيدًا من النفقات العامة ، حيث إنه يفحص بوضوح ما إذا كان 1 غير صفري في أعلى كل تكرار. المترجمون الحديثون لن يفعلوا هذا.

في بعض تطبيقات المحول البرمجي ، إذا قمت بتحريك مستويات التحذير عالية بما فيه الكفاية أو كنت تستخدم أداة مساعدة تشبه الوبر ، فقد تحصل على تحذير في الوقت (1) ، أو ما يعادله ، يقول أن شيئًا ما مثل التعبير الشرطي ثابت. من أجل (؛؛) لا يولد مثل هذا التحذير ، لأنه لا يوجد تعبير شرطي على الإطلاق. لقد عملت على مشاريع حيث أردنا أن نجمعها مع تحذيرات صفرية ، وبالتالي اخترت استخدام (؛؛) بدلاً من الوقت (1) المكافئ. أيضًا ، يمكن أن يكون البحث عن (؛؛) أسهل من البحث عن المتغيرات أثناء.

بالمناسبة ، إذا كنت ستستخدم الوقت ، فمن الأفضل قراءة ما يلي:

احيانا صحيح)

من القول:

بينما (1)

على الرغم من أن الأول يتطلب المزيد من الكتابة.

في C الحديثة (أي ، منذ C99 في عام 1999) ، يجب أن لا تقوم بإنشاء إصدار خاص بك من TRUE. بدلاً من ذلك ، قم بتضمين ملف الرأس stdbool.h ، وسيكون لديك حق الوصول إلى نوع البيانات المنطقي المحدد (بدلاً من استخدام الكلمة الأساسية _Bool) والرموز صحيحة وكاذبة. المتداول القيم الحقيقية / الخاطئة الخاصة بك هو ذلك ...

... عام 1998.


الاجابه 2:

المعيار: المعيار C ++

6.5.3 the for statement1 عبارة for لـ (for-init-statement conditionopt ؛ expressionopt) عبارة مماثلة لـ [code] {for-init-statement بينما (condition) {statement statement }} [/ code] باستثناء أن الأسماء المعلنة في for-statement-statement تقع في نفس المنطقة التعريفية كتلك المعلنة في الشرط ، وباستثناء أن المتابعة في البيان (غير مرفقة في عبارة تكرار أخرى) ستنفذ التعبير قبل إعادة حالة التقييم. [ملاحظة: وهكذا تحدد العبارة الأولى التهيئة للحلقة ؛ تحدد الحالة (6.4) اختبارًا ، تم إجراؤه قبل كل تكرار ، بحيث يتم إنهاء الحلقة عندما تصبح الحالة خاطئة ؛ يحدد التعبير غالبًا الزيادة التي يتم إجراؤها بعد كل تكرار. —ملاحظة النهاية] 2 يمكن حذف أي من الشرطتين أو كليهما والتعبير. شرط مفقود يجعل جملة ضمني مكافئ للوقت (صواب).

يمكن


الاجابه 3:

أي مترجم يستحق الملح من شأنه أن يولد رمز مماثل في كلتا الحالتين.

أحد التفضيلات المحتملة لخيار (؛؛) هو أن بعض الناس (كثيرون) يعتبرون "نمطًا سيئًا" استخدام الثوابت الرقمية في الكود. هذا هو ، أنت لا تكتب

س + = 10؛

لكنك تكتب

stat const const my_constant_value = 10؛

(...)

x + = my_constant_value ؛

والسبب هو أن وجود جميع الثوابت العددية المعلنة صراحة (ويفضل أن يكون ذلك في بداية الملف المصدر ، بدلاً من الانتشار عبر الملف) ينتج عنه رمز يمكن صيانته.

من الواضح أنه لا يوجد فرق فيما يتعلق بـ (؛؛) مقابل الوقت (1) ، لكن رؤية الرمز "1" في كود خالي من الأرقام لا تزال غير مريحة.

في C ++ (و ، منذ C99 ، وأيضًا في C) يمكننا كتابة "بينما (صحيح)" ، لكن هذا أطول من "بينما (1)" ، والذي هو نفسه أطول (بحرف واحد) من "for (؛؛) ".