لماذا يمكنني تعيين الهيكل ولكن ليس مقارنتها

StackOverflow https://stackoverflow.com/questions/1882974

  •  19-09-2019
  •  | 
  •  

سؤال

على الرغم من أنني منذ فترة طويلة C مبربرات، إلا أنني تعلمت مؤخرا أن المرء يمكنه تعيين متغيرات الهيكل مباشرة إلى بعضها البعض بدلا من استخدام MEMCPY:

struct MyStruct a,b;
...
a = b; /* implicit memcpy */

على الرغم من أن هذا يشعر قليلا "رفيع المستوى" ل C، فمن المفيد بالتأكيد. ولكن لماذا لا يمكنني القيام بالمقارنة المساواة وعدم المساواة:

if (a == b) ...
if (a != b) ...

هل هناك سبب وجيه لقيادة المعيار لاستبعاد هذا؟ أو هل هذا يتعارض مع معيار - خلاف ذلك أنيق للغاية؟

لا أرى لماذا يمكنني استبدال MEMCPY للحصول على مهام تنظيف، لكن لا بد لي من الحفاظ على تلك الموجودة في Memcmp القبيحة.

هل كانت مفيدة؟

المحلول

لكل comp.lang.c التعليمات:

لا توجد طريقة جيدة للمترجم لتنفيذ مقارنة الهيكل (أي لدعم == المشغل للهياكل) بما يتوافق مع نكهة C على مستوى منخفض. يمكن أن تقوم مقارنة بايت بايت بايت بايت مؤسس بطبقات عشوائية موجودة في "الثقوب" غير المستخدمة في الهيكل (تستخدم هذه الحشو للحفاظ على محاذاة الحقول اللاحقة الصحيحة). قد تتطلب المقارنة الميدانية حسب الميدان كميات غير مقبولة من التعليمات البرمجية المتكررة للهياكل الكبيرة. لا يمكن توقع أن تقارن أي مقارنة توليد مترجم المترجم مقارنة حقول المؤشر بشكل مناسب في جميع الحالات: على سبيل المثال، غالبا ما تكون مناسبة لمقارنة حقول Char * مع STRCMP بدلا من ==.

إذا كنت بحاجة إلى مقارنة هياكلين، فسيتعين عليك كتابة وظيفتك الخاصة للقيام بذلك، الحقل حسب الحقل.

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