2015-12-10 14 views
7

Tôi đang làm việc với một số mã C++ cũ, rõ ràng là đã có trước ngày tiêu chuẩn hóa và di chuyển từ iostream.h đến iostream và tương tự cho các gói khác. Do đó, phiên bản tương đối hiện đại của tôi g ++ thất bại khi cố gắng #include <iostream.h> vvCó thể thay đổi #include tên tệp bằng #define không?

tôi tò mò nếu nó có thể sử dụng tiền xử lý để thay đổi trường hợp của iostream.h chỉ iostream, thông qua dòng lệnh. Tôi đã thử thêm -Diostream.h=iostream vào g ++, nhưng điều đó dường như không làm thay đổi câu lệnh include.

Tôi đoán người tiền xử lý có thể sửa đổi câu lệnh bao gồm không?

+1

Sẽ không phải là một tập lệnh đơn giản trong ngôn ngữ kịch bản yêu thích của bạn, hãy làm tốt hơn? – StoryTeller

+4

Tại sao không chỉ xây dựng mã, nhận được nhiều lỗi, sửa các lỗi đó, v.v ...? Chắc chắn mã không còn có thể được xây dựng bởi các trình biên dịch trước chuẩn, nhưng ít nhất nó sẽ có thể tiếp tục sử dụng các trình biên dịch hiện đại hiện tại và trong tương lai. –

+1

Chỉ cần thực hiện tìm kiếm toàn cầu và thay thế. Bạn cũng cần phải thực hiện một số sửa chữa khác, chẳng hạn như thêm 'using namespace std;' hoặc các bằng cấp thích hợp. Một số điều này có thể được tự động hóa, một số không thể thực sự. –

Trả lời

8

Có ba dạng của câu lệnh #include.

# include "h-char-sequence" new-line 

# include <h-char-sequence> new-line 

# include pp-tokens new-line 

nơi pp-tokens phải mở rộng đến một trong hai dạng đầu tiên.

Bạn có thể sử dụng:

#include IOSTREAM 

và biên dịch với -DIOSTREAM="<iostream>" hay -DIOSTREAM="<iostream.h>" tùy theo phiên bản của trình biên dịch bạn đang làm việc.

Tuy nhiên, bạn không thể sử dụng

#include <iostream.h> 

và biên dịch với -Diostream.h=iostream.

Có một vài vấn đề với điều đó.

  1. iostream.h không phải là macro tiền xử lý hợp lệ.
  2. Biểu mẫu của câu lệnh #include không thích hợp để mở rộng macro.

Nếu bạn sẵn sàng di chuyển cơ sở mã để sử dụng tiêu đề C++ mới, bạn nên sử dụng phương pháp kịch bản yêu thích để thay đổi tất cả các tiêu đề C++ kiểu cũ thành tiêu đề C++ mới.

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