كيف أقوم بإصلاح خطأ مجلس التعاون الخليجي "للإعلان الأولي للحلقة المستخدم خارج وضع C99"؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

أحاول حل مشكلة 3n+1 ولدي for الحلقة التي تبدو مثل هذا:

for(int i = low; i <= high; ++i)
        {
                res = runalg(i);
                if (res > highestres)
                {
                        highestres = res;
                }

        }

لسوء الحظ، أتلقى هذا الخطأ عندما أحاول الترجمة مع دول مجلس التعاون الخليجي:

3np1.ج:15:خطأ:"من أجل" حلقة الإعلان الأولي المستخدم خارج وضع C99

لا أعرف ما هو وضع C99.أيه أفكار؟

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

المحلول

سأحاول أن أعلن i خارج الحلقة!

حظا سعيدا في حل 3n+1 :-)

هنا مثال:

#include <stdio.h>

int main() {

   int i;

   /* for loop execution */
   for (i = 10; i < 20; i++) {
       printf("i: %d\n", i);
   }   

   return 0;
}

اقرأ المزيد عن الحلقات في لغة C هنا.

نصائح أخرى

هناك مفتاح التحويل البرمجي الذي يتيح وضع C99, ، والذي يسمح، من بين أمور أخرى، بالإعلان عن متغير داخل حلقة for.لتشغيله استخدم مفتاح التحويل البرمجي -std=c99

أو كما يقولOysterD، أعلن عن المتغير خارج الحلقة.

للتبديل إلى C99 الوضع في CodeBlocks, ، اتبع الخطوات التالية:

انقر خيارات المشروع/البناء, ، ثم في علامة التبويب إعدادات المترجم اختر علامة تبويب فرعية خيارات أخرى, ، ومكان -std=c99 في منطقة النص، ثم انقر فوق نعم.

هذا سوف يتحول C99 وضع التشغيل للمترجم الخاص بك.

آمل أن يساعد هذا شخص ما!

لقد حصلت على هذا الخطأ أيضا.

for (int i=0;i<10;i++) { ..

غير صالح في معيار C89/C90.كما يقول OysterD، عليك القيام بما يلي:

int i;
for (i=0;i<10;i++) { ..

الكود الأصلي الخاص بك مسموح به في C99 والمعايير الأحدث للغة C.

@بلوجبرد:

ميزات جديدة في C99

  • وظائف مضمنة
  • لم يعد إعلان المتغير يقتصر على نطاق الملف أو بداية العبارة المركبة
  • العديد من أنواع البيانات الجديدة، بما في ذلك int long long، وأنواع الأعداد الصحيحة الموسعة الاختيارية، ونوع بيانات منطقية صريحة، ونوع معقد لتمثيل الأعداد المركبة
  • المصفوفات ذات الطول المتغير
  • دعم التعليقات المكونة من سطر واحد والتي تبدأ بـ //، كما هو الحال في BCPL أو C++
  • وظائف المكتبة الجديدة، مثل snprintf
  • ملفات الرأس الجديدة، مثل stdbool.h وinttypes.h
  • وظائف الرياضيات العامة من النوع (tgmath.h)
  • تحسين الدعم للنقطة العائمة IEEE
  • المُهيئات المعينة
  • حرفية مركبة
  • دعم وحدات الماكرو المتغيرة (وحدات الماكرو ذات التصميم المتغير)
  • تقييد التأهيل للسماح بتحسين التعليمات البرمجية بشكل أكثر قوة

http://en.wikipedia.org/wiki/C99

جولة في C99

إذا قمت بتجميع التغيير في C

for (int i=0;i<10;i++) { ..

ل

int i;
for (i=0;i<10;i++) { ..

يمكنك أيضًا التجميع باستخدام مجموعة التبديل C99.ضع -std=c99 في سطر الترجمة:

gcc -std=c99 foo.c -o foo

المرجع: http://cplusplus.syntaxerrors.info/index.php?title="من أجل"_loop_initial_declaration_used_outside_C99_mode

واجهت نفس المشكلة وهي تعمل عليك فقط أن تعلن عن i خارج الحلقة:

int i;

for(i = low; i <= high; ++i)

{
        res = runalg(i);
        if (res > highestres)
        {
                highestres = res;
        }

}

لأي شخص يحاول تجميع التعليمات البرمجية من مصدر خارجي يستخدم أداة بناء آلية مثل يصنع, ، لتجنب الاضطرار إلى تعقب مكالمات التحويل البرمجي الصريحة لدول مجلس التعاون الخليجي، يمكنك تعيين متغير بيئة.أدخل في موجه الأوامر أو أدخل .bashrc (أو .bash_profile على نظام Mac):

export CFLAGS="-std=c99"

لاحظ أن الحل المماثل ينطبق إذا واجهت سيناريو مشابهًا مع تجميع C++ الذي يتطلب C++ 11، فيمكنك استخدام:

export CXXFLAGS="-std=c++11"

بالنسبة إلى Qt-Creator:فقط أضف الأسطر التالية إلى ملف *.pro ...

QMAKE_CFLAGS_DEBUG = \
    -std=gnu99

QMAKE_CFLAGS_RELEASE = \
    -std=gnu99

أجابت جيهين ستامبولي على سؤال OP بشكل مباشر ...كان السؤال؛لماذا

for(int i = low; i <= high; ++i)
{
    res = runalg(i);
    if (res > highestres)
    {
        highestres = res;
    }
}

إنتاج الخطأ؛

3np1.c:15: error: 'for' loop initial declaration used outside C99 mode

الذي هو الجواب

for(int i = low...

يجب ان يكون

int i;
for (i=low...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top