Подавить предупреждение GCC 4.2.1 с прагмой - PullRequest
1 голос
/ 24 ноября 2010

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

#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 ]

2 голосов
/ 24 ноября 2010

Похоже, что предупреждение для меня исчезло:

void *get_stack(void) {
  void *v = &v;
  return v;
}
0 голосов
/ 24 ноября 2010

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

Вы можете сообщить об ошибке , чтобы включить ее в систему диагностики.

...