خطأ في بناء الجملة مع إصدار مختلف لدول مجلس التعاون الخليجي؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

لقد كتبت برنامجًا بلغة C باستخدام Ubuntu Linux وأحتاج الآن إلى نقله إلى جهاز UNIX (أو ما أعتقد أنه صندوق UNIX).يتم تجميعه بشكل جيد على نظام Ubuntu الخاص بي مع دول مجلس التعاون الخليجي ولكن عندما أحاول تجميعه مع مجلس التعاون الخليجي على صندوق UNIX، فإنه يعطي هذا الخطأ:

a.c: In function `goUpDir':
a.c:44: parse error before `char'
a.c:45: `newDir' undeclared (first use in this function)
a.c:45: (Each undeclared identifier is reported only once
a.c:45: for each function it appears in.)
a.c: In function `goIntoDir':
a.c:54: parse error before `char'
a.c:57: `newDir' undeclared (first use in this function)
a.c:57: `oldDir' undeclared (first use in this function)

يبدو أن المشاكل الرئيسية هي خطأ التحليل من قبل char (والآخرون مرتبطون)

44  char newDir[50] = ""; 
54  char* oldDir = (char*)get_current_dir_name();

هذه مجرد إعلانات سلاسل بسيطة على النمط C.هل هناك ملف رأس أحتاج إلى تضمينه حتى يعمل في UNIX؟

ملاحظة.ما هو الأمر لمعرفة إصدار Unix وإصدار gcc الذي تستخدمه؟معرفة هذا سيسمح لي أن أكون أكثر تحديدًا في سؤالي.

شكرًا

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

المحلول

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

نصائح أخرى

إذا كنت ترغب في التأكد من التعليمات البرمجية الخاصة بك والمحمولة دائما استخدام -pedantic أو -pedantic-أخطاء.

وهذا سيوفر تحذيرات / أخطاء حيث الشوارد التعليمات البرمجية من الامتثال للمعايير.

وبينما نحن في هذا الموضوع. ربما يجب عليك أيضا تشغيل كل التحذيرات. وهناك أسباب وجيهة لماذا المترجم يحذرك. عندما تتحرك رمز من منصة واحدة إلى أخرى هذه التحذيرات هي مصدر الخلل المحتملة باعتبارها جديد الأجهزة / OS / مترجم قد لا تعمل نفس واحدة الحالي.

وأيضا استخدام الصحيح الواجهة دول مجلس التعاون الخليجي للتنفيذ: ز ++ ستعامل * ملفات .C مثل ملفات C ++ إلا إذا كنت أقول صراحة لم يفت. لذلك إذا كنت تجميع الحقيقي C ثم استخدام دول مجلس التعاون الخليجي لا ز ++.

<اقتباس فقرة>   

ودول مجلس التعاون الخليجي -pedantic سور الصين -Werror * .C
  ز ++ -pedantic سور الصين -Werror * .CPP

لمساعدة مع مشكلة معينة قد يكون من الجميل أن نرى خط 43. على الرغم من أن يقول خطأ في سطر 44 هي سبب الكثير من المشاكل من قبل خط المتابعة وجود مشكلة ومشكلة عدم الكشف عنها بواسطة محلل حتى تحصل على ولكسيم الأول على السطر التالي.

وكيف قمت بنسخ الملف عبر؟ هل من الممكن أن قمت بإدراجه شيء ينبغي أن لا يكون هناك؟

وراجع للشغل: الرجاء إصلاح عن استخدامك للعلامة التعليمات البرمجية في التعليمات البرمجية الخاصة بك - انها حاليا من المستحيل تقريبا لقراءة دون استخدام "عرض المصدر" في المتصفح الخاص بي

وأما بالنسبة لينتهي بك الأسئلة:

uname -a
gcc -v

عند محاولة كتابة التعليمات البرمجية المحمولة، والأعلام المترجم التالية اقول لكم عن الكثير من المشاكل <م> قبل تحصل بقدر ما تحاول ترجمة التعليمات البرمجية على منصة القادمة:

-std=c89 -pedantic -Wall

إذا كنت بحاجة فقط لاستهداف دول مجلس التعاون الخليجي على منصات أخرى، وليس أي المجمعين أخرى، ثم يمكنك أن تحاول:

-std=gnu89 -pedantic -Wall

ولكن كنت أعتقد أن هذا قد تسمح ملحقات GNU على دول مجلس التعاون الخليجي أحدث غير معتمدة على كبار السن واحد. لست متأكدا.

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

وسيكون لديك لتزويدنا مزيد من السياق عن الأخطاء ... واحد على الأقل، وربما عدة أسطر قبل خطوط 44 و 54. وفي تخمين، إذا كنت تعطي لنا رمز من بداية تعريف الدالة قبل خط 44 (ربما خط 40 أو نحو ذلك) وصولا إلى خط 54 (أو بضعة أسطر في وقت لاحق - وربما خط 60 - ثم أننا قد تكون قادرة على مساعدة شيء ما مع المعلومات قبل خط 44 الذي يسبب أن نتوقع شيئا آخر غير ". شار "في السطر 44؛. كما سبق (ربما نفس المشكلة) في السطر 54

والمعلومات غير كافية. رمز أعلاه هو على الأقل كما يضيع وواحدة ل معرفة ما إذا كانت تلك المحادثات حول ANSI C89 أو C99 ANSI. الجواب الأول هو الخطأ في هذا المعنى الواسع.

والتحيات فريدريش

ستيف,

رسالة الخطأ الأولى تقول "parse error before 'char'".ما هو الكود الذي يسبق شار؟هل هو إعلان وظيفة؟هل يتضمن أي أنواع محددة من قبل المستخدم أو أي شيء من هذا القبيل؟

المصدر الأكثر احتمالا لهذا الخطأ هو أن شيئا قريبا فوق يستخدم السطر 44 نوعًا أو ماكرو تم الإعلان عنه في ملف رأس...قد يختلف ملف الرأس هذا بين نظام Ubuntu الخاص بك والنظام الذي تحاول الترجمة عليه.

وماذا UNIX هو؟ AIX، الألتريكس، مينيكس، زينويكس؟

ودول مجلس التعاون الخليجي لديها "--version" العلم:

gcc --version

لعرض إصدار مجلس التعاون الخليجي:

gcc --version

وقد تساعد على إظهار وظيفة حتى يمكننا أن نرى رمز المحيطة بها. التي غالبا ما تكون المشكلة مع "خطأ تحليل قبل" أخطاء نوع.

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