Откуда этот backward_warning.h #warning? - PullRequest
6 голосов
/ 26 ноября 2011

Не просматривая каждый отдельный исходный файл в моем проекте XCode, есть ли способ узнать, какой #include вызывает следующее предупреждение?

#warning This file includes at least one deprecated or antiquated header. 
Please consider using one of the 32 headers found in section 17.4.1.2 of the 
C++ standard. Examples include substituting the <X> header for the <X.h> 
header for C++ includes, or <iostream> instead of the deprecated header 
<iostream.h>. To disable this warning use -Wno-deprecated.

Нажатие на ошибку в XCode просто открывает файл backward_warning.h, который совершенно бесполезен.

Я знаю, что означает предупреждение, я знаю, как его исправить (когда я вижу рассматриваемый файл и могу посмотреть его #include) ... но я просто не знаю, как найти файл, вызывающий ошибку !

Ответы [ 3 ]

11 голосов
/ 26 ноября 2011

Используйте параметр -H для GCC - в нем будут перечислены включаемые файлы заголовков (вместе с указанием вложенности, чтобы вы могли видеть, какой файл включает в себя и какой заголовок).

С -Hошибка будет помещена в выходной поток, ясно показывая, как компилятор получил backward_warning.h.

Например, когда я включаю hash_map, я бы увидел:

mikeb@ubuntu:~$ g++  -H -c test.cpp
. /usr/include/c++/4.4/backward/hash_map
.. /usr/include/c++/4.4/backward/backward_warning.h
In file included from /usr/include/c++/4.4/backward/hash_map:60,
                 from test.cpp:3:
/usr/include/c++/4.4/backward/backward_warning.h:28: warning: #warning This file
includes at least one deprecated or antiquated header which may be removed without
further notice at a future date. Please use a non-deprecated interface with equivalent 
functionality instead. For a listing of replacement headers and interfaces, consult 
the file backward_warning.h. To disable this warning use -Wno-deprecated.

... a bunch of snipped output ...

Кроме того, /showIncludes выполняет ту же функцию в MSVC.

2 голосов
/ 26 ноября 2011

Как вы сказали, файл /usr/include/c++/4.2.1/backward/backward_warning.h содержит текст, который вы цитируете.Заголовки, которые включают backward_warning.h:

  • /usr/include/c++/4.2.1/backward/algo.h
  • /usr/include/c++/4.2.1/backward/algobase.h
  • /usr/include/c++/4.2.1/backward/alloc.h
  • /usr/include/c++/4.2.1/backward/bvector.h
  • /usr/include/c++/4.2.1/backward/complex.h
  • /usr/include/c++/4.2.1/backward/defalloc.h
  • /usr/include/c++/4.2.1/backward/deque.h
  • /usr/include/c++/4.2.1/backward/fstream.h
  • /usr/include/c++/4.2.1/backward/function.h
  • /usr/include/c++/4.2.1/backward/hash_map.h
  • /usr/include/c++/4.2.1/backward/hash_set.h
  • /usr/include/c++/4.2.1/backward/hashtable.h
  • /usr/include/c++/4.2.1/backward/heap.h
  • /usr/include/c++/4.2.1/backward/iomanip.h
  • /usr/include/c++/4.2.1/backward/iostream.h
  • /usr/include/c++/4.2.1/backward/istream.h
  • /usr/include/c++/4.2.1/backward/iterator.h
  • /usr/include/c++/4.2.1/backward/list.h
  • /usr/include/c++/4.2.1/backward/map.h
  • /usr/include/c++/4.2.1/backward/multimap.h
  • /usr/include/c++/4.2.1/backward/multiset.h
  • /usr/include/c++/4.2.1/backward/new.h
  • /usr/include/c++/4.2.1/backward/ostream.h
  • /usr/include/c++/4.2.1/backward/pair.h
  • /usr/include/c++/4.2.1/backward/queue.h
  • /usr/include/c++/4.2.1/backward/rope.h
  • /usr/include/c++/4.2.1/backward/set.h
  • /usr/include/c++/4.2.1/backward/slist.h
  • /usr/include/c++/4.2.1/backward/stack.h
  • /usr/include/c++/4.2.1/backward/stream.h
  • /usr/include/c++/4.2.1/backward/streambuf.h
  • /usr/include/c++/4.2.1/backward/strstream
  • /usr/include/c++/4.2.1/backward/tempbuf.h
  • /usr/include/c++/4.2.1/backward/tree.h
  • /usr/include/c++/4.2.1/backward/vector.h

Следовательно, код, который вы компилируете, должен включать такой заголовок, как:

#include <vector.h>

вместо предпочтительного:

#include <vector>

И компилятор суетится по этому поводу.Исправление состоит в том, чтобы найти код, который включает в себя стандартный заголовок и обновить его для использования стандартного заголовка.

(Вы получаете аналогичные предупреждения об устаревших функциях, если компилируете git - функции являются функциями SHA1от OpenSSL. Это неприятно, быть вежливым.)

0 голосов
/ 26 ноября 2011

У вас где-то есть старый стиль заголовка.

как-то так

IE:

#include <iostream.h>  //instead of <iostream>
#include <stdlib.h>    //instead of <cstdlib>
#include <stdio.h>    //instead of <cstdio>

если он включен из библиотеки, то я думаю, что вы SOLЯ лично не стал бы рыться в библиотеке, чтобы она заработала, вам придется обновлять их, чтобы использовать пространства имен.и прочее такое.

...