2011-11-26 26 views
5

Nếu không tìm kiếm qua từng tệp nguồn trong dự án XCode của tôi, có cách nào để tìm ra #include nào đang kích hoạt cảnh báo sau không?Backward_warning.h #warning này đến từ đâu?

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

Nhấp vào lỗi trong XCode chỉ mở tệp backward_warning.h, điều này hoàn toàn vô dụng.

Tôi biết cảnh báo có nghĩa là gì, tôi biết cách khắc phục (khi tôi xem tệp được đề cập và có thể xem #includes) ... nhưng tôi không biết cách tìm tệp gây ra lỗi!

Trả lời

10

Sử dụng tùy chọn -H để GCC - đó sẽ liệt kê các tệp tiêu đề đang được bao gồm (cùng với chỉ thị lồng nhau để bạn có thể xem tệp nào bao gồm tiêu đề nào).

Với -H lỗi sẽ được đặt trong luồng đầu ra cho thấy rõ cách trình biên dịch nhận được backward_warning.h.

Ví dụ, khi tôi bao gồm hash_map, tôi muốn xem:

[email protected]:~$ 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 ... 

Là một sang một bên, /showIncludes thực hiện các chức năng tương tự trong MSVC.

+3

Đã hiệu quả. Tìm thấy tôi đã có của riêng tôi 'Vector.h' (mà không dựa trên toán học vectơ, không STL Vectors) rằng trình biên dịch đã gây nhầm lẫn với tiêu đề STL Vector. Một chút đổi tên tệp và cảnh báo đã biến mất. Sẽ không bao giờ thấy rằng chỉ bằng cách xem các tiêu đề là 'Vector.h' là một đoạn mã của riêng tôi. – Piku

+1

@Piku: Phấn lên một hệ thống tệp MacOS bảo vệ trường hợp nhưng không phân biệt chữ hoa chữ thường. Có lẽ bạn có thể/nên sử dụng cơ chế '#include ' (hoặc '#include"/Vector.h "') để cô lập các tiêu đề của bạn khỏi các tiêu đề hệ thống. –

0

Bạn có tiêu đề kiểu cũ ở đâu đó.

cái gì đó như

IE này:

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

nếu nó được bao gồm từ một thư viện sau đó tôi nghĩ rằng bạn đang SOL, cá nhân tôi sẽ không lục lọi thông qua một thư viện để có được nó để làm việc, bạn sẽ phải cập nhật chúng để sử dụng không gian tên. và những thứ khác.

2

Như bạn đã nêu, tệp /usr/include/c++/4.2.1/backward/backward_warning.h chứa văn bản bạn trích dẫn.Các tiêu đề trong đó bao gồm backward_warning.h là:

  • /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

Do đó, các mã bạn đang soạn thảo phải được bao gồm một tiêu đề như:

#include <vector.h> 

thay vì ưa thích:

#include <vector> 

Và trình biên dịch là đang kén chọn nó. Bản sửa lỗi là tìm mã bao gồm tiêu đề chuẩn trước và cập nhật nó để sử dụng tiêu đề chuẩn.

(Bạn nhận được cảnh báo tương tự về chức năng phản đối nếu bạn biên dịch git - các chức năng là chức năng SHA1 từ OpenSSL Nó là một phiền toái, để tỏ ra lịch sự về nó..)

Các vấn đề liên quan