سؤال

أود أن أقمع تحذيرًا معينًا الصادر عن دول مجلس التعاون الخليجي الناجم عن إرجاع عنوان متغير محلي.

#include <stdio.h>
#pragma GCC diagnostic ignored "-Waddress"
void *get_stack() {
  unsigned long v;
  return &v;
}

int main()
{
  void *p = get_stack();
  printf("stack is %p\n",p);
  return 0;
}

>gcc -fdiagnostics-show-option p.c
p.c: In function ‘get_stack’:
p.c:5: warning: function returns address of local variable

المنصة: موجودة على الأقل على MacOSX 10.5 Snow Leopard ، لم أحاول على Linux بعد.

في حال كنت تتساءل لماذا: أود أن أركض بتحذيرات تحولت إلى أخطاء لوقف عملية بناء طويلة حتى أتمكن من رؤية المشكلات فعليًا وإضفاء الإصلاح عليها.

هذا الرمز المعين ليس خطأ ، إنه تقنية "محمولة" للعثور على مؤشر المكدس (الذي يعمل على MSVC أيضًا). [في الواقع لن يعمل على itanium الذي يحتوي على مؤشران مكدس

مطلوب مؤشر المكدس للاستخدام بواسطة روتين جمع القمامة (للبحث عن مؤشرات على أكوام الخيوط المعلقة).

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

المحلول

يبدو أن هذا يجعل التحذير يختفي بالنسبة لي:

void *get_stack(void) {
  void *v = &v;
  return v;
}

نصائح أخرى

كما مستندات ملاحظة ، يمكنك فقط التحكم في الخيارات التي تظهر -fdiagnostics-show-option. لا يظهر لي. أنا أركض 4.4.1 ، لكنني أشك في أنه سيكون لـ 4.2.1 أيضًا.

قد ترغب في تقديم خطأ للحصول عليها مدرجة في نظام التشخيص.

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