سؤال

كنت أقرأ عن الأعلام المستخدمة في دول مجلس التعاون الخليجي، وقرأت توصية لاستخدامها gcc -ansi -pedantic -Wall file1 [file2 [file3...]] -o output.من أجل جودة الكود الخاص بي، وللحفاظ على معاييره، والحصول على جميع التحذيرات بشأنه.

حسنًا ، بخصوص التجميع باستخدام -ansi ...إذا أدرجت <stdlib.h>, ، gcc يعطيني هذا الخطأ:

In file included from ansi.c:2: C:/c/bin/../lib/gcc/mingw32/3.4.5/../../../../include/stdlib.h:317: error: syntax error before "double"

هذا السطر هو هذا:

inline double __cdecl __MINGW_NOTHROW strtod (const char* __restrict__ __nptr, char** __restrict__ __endptr)
{ return __strtod(__nptr, __endptr); }

يفعل inline غير موجود في C؟ألا ينبغي أن يكون الرأس "القياسي" معياريًا؟هل يجب عليّ فقط إزالة السطر أو تجنب التحويل البرمجي باستخدام stdlib.h (لا أستطيع حقًا تذكر ما هو موجود في stdlib الآن)؟

تحديث

من خلال قراءة الرابط الذي نشره Adam، اكتشفت أن كلمة "inline" ليست كلمة رئيسية في C89، وأن C89 هي ما يتم فرضه باستخدام رمز التبديل -ansi.اضطررت لتغييره إلى __inline__ وهو، على ما أعتقد، ماكرو MinGW.

شكرا للمساعدة.

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

المحلول

يبدو أنها مشكلة معروفة في mingw:رابط لأرشيف القائمة البريدية mingw

يخبرنا أن المضمنة ليست جزءًا من معيار c89 (مثل -ansi يجبرها) ويجب استبدالها بـ __inline__ بدلاً من

إذا قرأت رسائل البريد الإلكتروني التالية، يخبرك أحدهم أنه قام بإصلاح هذا الخطأ مباشرة في السيرة الذاتية.تحقق من الكود الجديد وألق نظرة (؟) ثم أخبرنا.:-)

نصائح أخرى

لا يعد inline جزءًا مما يعتبره gcc 3.4.5 ANSI C - فهو جزء من C99، أعتقد هل يمكنك تأكيد إصدار gcc الذي تستخدمه؟

لقد واجهت هذه المشكلة من قبل عند الترجمة إلى معيار معين.في نظام Linux الذي كنت أقوم بالتجميع إليه، لم تكن رؤوس pthread rwlock متوافقة مع c99 (أو لم يتم إدخالها).يجب عليك توخي الحذر في هذه الحالات، ويمكن أن يساعد التحقق من مخرجات المعالج المسبق في بعض الأحيان في هذه الحالات.

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