سؤال

وأنا بناء تطبيق يحتاج إلى تجميع على كل من ويندوز ولينكس. يتم كتابة التطبيق في C، كل شيء تقريبا يعمل إلا المترجم مينغو يرفض هذا

typedef struct somestruct{
   ...snip...
   enum {NODE, REAL} type;
};

somestruct* something;
switch (something->type){
 case NODE:
   ...stuff...;
   break;
 case REAL:
   ...otherstuff...;
   break;
}

ويقول لم يتم تعريف NODE و واقعى، ولكن إذا كنت توفير قرار نطاق

case somestruct::NODE

وهذا يجمع مع مينغو 3.4.1، ولكنه فشل في ترجمة مع دول مجلس التعاون الخليجي 4.1.2 على لينكس. هل هذه قضية مترجم ببساطة لا بد من حلها مع preprocessors أو أن هناك بعض تفسير آخر؟

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

المحلول

إذا تخلص من تداخل، فإنه يجب أن تعمل تنقليا:

typedef enum somestruct_type {
    somestruct_type_NODE, somestruct_type_REAL
} somestruct_type;
typedef struct somestruct {
   ...snip...
   somestruct_type type;
} somestruct;

ولقد رأيت رمز مشابهة جدا لهذا يكون ميناء لعدد كبير من المجمعين C ++ و C.

و(أنا لا أقول هذا هو السبيل الوحيد للقيام بذلك، أنا فقط أقول أن هذه الطريقة تعمل).

نصائح أخرى

ويتم كتابة التطبيق في "C"، إلا أن مطالب المترجم أن تفعل somestruct::NODE، وهي صالحة "C ++"، ولكن غير صالحة "C".

والخلاصة: يتم ترجمة هذا الرمز مع وضع مينغو في C ++، ولكن مع كل المجمعين أخرى في وضع C

والسبب المحتمل: مينغو قد لا علاج foo.C وfoo.c نفسه، وتتم تسمية الملفات مع لاحقة العاصمة C (وهو ما يعني ضمنا C ++ على UNIX)

والحل: إضافة العلم -xc لمينغو لإجبار سهل-C بتجميع

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