سؤال
أود أن أقمع تحذيرًا معينًا الصادر عن دول مجلس التعاون الخليجي الناجم عن إرجاع عنوان متغير محلي.
#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;
}
لا تنتمي إلى StackOverflow