لماذا يعطي gcc خطأ المتغير غير المستخدم للمتغيرات المحلية ولكن ليس للمتغيرات العامة؟

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

  •  21-08-2019
  •  | 
  •  

سؤال

عندي سؤال بخصوص مجلس التعاون الخليجيلماذا أحصل على خطأ المتغير غير المستخدم عندما أقوم بتعريف المتغير محليًا في دالة ولكن ليس عندما يكون المتغير عالميًا في ملف فريد؟.

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

شكرا لك مقدما.

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

المحلول

وإذا كان عن طريق "العالمية في ملف فريدة من نوعها"، يعني "int x;" خارج أي وظيفة، وانها ليست وظيفة المجمعين للكشف عن ذلك، فإن المتغير يجب أن يكون متاحا للرابط في حالة وحدة تجميع أخرى يحتاج إليها (مثل errno).

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

نصائح أخرى

والمترجم ليس لديه وسيلة لمعرفة إذا تم استخدام متغير عمومي - يمكن استخدامه من وحدة تجميع مكتوب بلغة مختلفة تماما، على سبيل المثال

.

ولأن المتغيرات العالمية يمكن استخدامها في أي مكان آخر أن المترجم لا يمكن أن يعرف. على سبيل المثال في برنامج مكتبة س الخارجي.

والسكان المحليين غير المستخدمة يمكن تحديده من خلال مترجم. لا يمكن إلا أن غلوبالس غير المستخدمة يحددها رابط، لأنها يمكن أن تكون مشتركة عبر ملفات الكائن.

في عام، رابط لا تفعل تحذيرات لرمز جنرال.

عند المتغير العالمي، والمترجم له الرؤية لم يكن كاملا في جميع وحدات تجميع في المشروع - يمكن تعديل المتغير في وحدة تجميع آخر. رابط غير قادرة على معرفة أن كانت غير مستخدمة، وربما أنها سوف إزالته من ملف الكائن.

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

وانها لغة مشتركة لديك كل ما تبذلونه غلوبالس المحددة في ملف واحد. هذا الملف قد لا يكون أي رمز، رمز وأقل من ذلك بكثير يستخدم كل المتغيرات.

لقد واجهت نفس السؤال عندما قمت بإنشاء dalvikVM في android2.3 وحصلت على مفتاح هذه النقطة.وذلك لأن معلمات المترجم صارمة للغاية:

LOCAL_CFLAGS += -خطأ.

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