2015-10-27 22 views
10

Tôi muốn sử dụng chỉ thị #include với tên tệp được chuyển dưới dạng macro được xác định bên ngoài.Thay thế macro trong #include chỉ thị

Ví dụ:

#include #FILE".h" 

nơi FILE sẽ được định nghĩa là chuỗi MyFile (không có dấu ngoặc kép), kết quả là

#include "MyFile.h" 

Các stringizing điều hành # không thể được sử dụng ở đây là biểu tượng FILE không phải là một cuộc tranh luận vĩ mô. Tôi đã thử các cách tiếp cận khác, vô ích.

Bạn có thấy giải pháp không?

+1

gcc cung cấp một số chức năng * bên ngoài * bao gồm các tệp http://stackoverflow.com/questions/3387453/include-header-files-using-command-line-option. Điều này có thể giúp bạn. –

+0

Thú vị. Tôi đang sử dụng cả gcc và MSVC và chỉ thị #include của tôi có thể không ở vị trí đầu tiên. –

+2

Không thể thực hiện được, vì việc ghép nối chuỗi tiếp giáp bằng chữ không được thực hiện cho đến sau giai đoạn tiền xử lý, ví dụ: '" MyFile "". H "' sẽ không phải là tên bao gồm hợp lệ. Bạn không thể chỉ định nghĩa 'FILE' làm tên tiêu đề thực tế được bao gồm, ví dụ: '-DFILE =" MyFile.h "'? –

Trả lời

12

Nối chuỗi ký tự xảy ra hai giai đoạn dịch sau khi #include chuyển hướng được giải quyết; cách tiếp cận của bạn không thể làm việc. Thay vào đó, hãy thử điều gì đó dọc theo các dòng của

#define STRINGIZE_(a) #a 
#define STRINGIZE(a) STRINGIZE_(a) 

#define MYFILE stdio 
#include STRINGIZE(MYFILE.h) 

int main() { 
    printf("asdf"); 
} 

Demo.

+0

Tuyệt vời, hoạt động hoàn hảo! –

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