2010-11-24 2 views
1

Я хотел бы подавить специальное предупреждение, выданное gcc, вызванное возвратом адреса локальной переменной.Подавить gcc 4.2.1 предупреждение с помощью pragma

#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, который имеет два стека указателей]

указатель стека, необходимого для использования в процессе сборки мусора рутинной (для поиска указателей на штабеля подвесных нитей).

ответ

2

Это, как представляется, сделать предупреждение исчезнет для меня:

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

меня тоже: Интересно, почему? В любом случае спасибо! – Yttrill 2010-11-24 20:37:22

0

В качестве примечания docs вы можете использовать только те параметры, которые отображаются только для -fdiagnostics-show-option. Это не для меня. Я запускаю 4.4.1, но я сомневаюсь, что это тоже будет для 4.2.1.

Возможно, вам понадобится file a bug, чтобы включить его в диагностическую систему.