سؤال

أود أن أكون قادرًا على التنبؤ بما سيكون في الملف الثنائي الناتج عندما أتصل بـ Write in Ada لإجراء تسلسل للسجل.هل تعرف أين يمكنني البحث عن هذا؟

لدي بعض برامج Ada القديمة التي تنتج ملفًا ثنائيًا عن طريق كتابة سجل، وأحتاج إلى تصحيح أخطاء برنامج C++ الذي من المفترض أن يكتب ملفًا ثنائيًا متوافقًا.لذا، أود أن أفهم القواعد التي تتبعها Ada عند إجراء تسلسل لسجل، حتى أتمكن من التأكد من أن كود C++ سينتج سجلاً مكافئًا وظيفيًا.

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

المحلول

كما ذكر آخرون، بدون تعليمات إضافية، سيتخذ المترجم قراراته الخاصة بشأن تخطيط السجل.أفضل طريقة هي تغيير الكود الأصلي لكتابة السجل باستخدام تخطيط محدد.على وجه الخصوص، شرط تمثيل السجل يسمح لمبرمج Ada بتحديد التخطيط الفعلي للسجل بالضبط.في الواقع، يجب عليك التحقق لمعرفة ما إذا كان الكود الأصلي يحتوي على أحد هذه العناصر للنوع المعني.إذا كان الأمر كذلك، فهذا سوف يجيب على سؤالك بدقة.

نصائح أخرى

تنسيق الإخراج المتسلسل لـ "الكتابة". لا شيء مطلقا للقيام مع شروط التمثيل.

افتراضيًا، سيقوم المترجم بإخراج مكونات السجل بدون حشو المحاذاة بالترتيب الذي تمت كتابته به في إعلان السجل، باستخدام نظام ترجمة لم يتم تعريفه بواسطة المعيار (لذلك قد لا تحصل على إمكانية التشغيل البيني بين المترجمين).يقوم GNAT (المترجم الخليجي Ada) بإخراج كل مكون بعدد صحيح من البايتات.

إذا كنت تريد دفق قيم نوع ما باستخدام تنسيق مختلف، فيمكنك تجاوز "الكتابة للنوع".وكمثال غير معتاد، يمكنك الدفق إلى XML.

بشكل أساسي، سيقوم المترجم بإعادة ترتيب مكونات أنواع السجلات الخاصة بك، إلا إذا كنت تستخدم أوامر pragma PACK أو pragma PRESERVE_LAYOUT مع أنواع السجلات الخاصة بك.بالإضافة إلى ذلك، سيقوم المترجم بتضمين الكائنات للحفاظ على محاذاة مكونات السجل.المكونات تتبع:

عدد صحيح:أرقام موقعة مكونة من 8 أو 16 أو 32 بت مكونة من ثنائيين

يطفو:تنسيق IEEE 32 بت

تعويم طويل:تنسيق IEEE 64 بت

نقطة ثابتة:8 أو 16 أو 32 بت؛ومع ذلك، يمكن أن يؤثر النطاق والدلتا المحددان على 16 أو 32

التعدادات:عدد صحيح، وعادة ما يتم تمثيل العنصر الأول بـ 0

القيم المنطقية:كائن التعداد، بطول 8 بتات، يقوم LSB بتخزين القيمة:0 = خطأ، 1 = صحيح

الشخصيات:كائن التعداد، بطول 8 بتات، بدون إشارة من 0 إلى 127

أنواع الوصول:32 بت، قيمة 32 بت 0 تمثل NULL

المصفوفات:يتم تخزينها بشكل متجاور في ترتيب الصف الرئيسي، ويعتمد الحجم على النوع الأساسي.المصفوفة مبطنة للتأكد من أن جميع العناصر لديها المحاذاة المناسبة لأنواعها.

ال الدليل المرجعي للغة Ada95 يقول (القسم 13.13.2):

"بالنسبة للأنواع الأولية، يتم تحديد التمثيل من حيث عناصر الدفق.بالنسبة للأنواع المركبة، يتم استدعاء سمة الكتابة أو القراءة لكل مكون بترتيب أساسي.الترتيب المتعارف عليه للمكونات هو البعد الأخير الذي يتغير بشكل أسرع بالنسبة للمصفوفة، والترتيب الإجمالي الموضعي للسجل."

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