Вопрос

Я хотел бы подавить конкретное предупреждение, выданное 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, который имеет два указателя стека

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

Это было полезно?

Решение

Это, кажется, делает предупреждение уйти для меня:

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

Другие советы

Как то документы Примечание, вы можете контролировать только параметры, которые отображаются для -fdiagnostics-show-option. Отказ Это не отображается для меня. Я бегу 4.4.1, но я сомневаюсь, что это бы на 4,2,1.

Вы можете захотеть подать ошибку Чтобы получить его входит в систему диагностики.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top