Bạn có thể sử dụng ở #include
bất kỳ đâu trong tệp, không chỉ ở phạm vi toàn cục - như bên trong một hàm (và nhiều lần nếu cần). Chắc chắn, phong cách xấu và không tốt, nhưng có thể và đôi khi hợp lý (tùy thuộc vào tệp bạn đưa vào). Nếu #include
chỉ có một lần thì điều đó sẽ không hiệu quả. #include
Rốt cuộc chỉ thay thế văn bản ngu ngốc (cut'n'paste) và không phải mọi thứ bạn đưa vào đều phải là tệp tiêu đề. Bạn có thể - ví dụ - #include
một tệp chứa dữ liệu được tạo tự động chứa dữ liệu thô để khởi tạo a std::vector
. Giống
std::vector<int> data = {
#include "my_generated_data.txt"
}
Và có "my_generated_data.txt" là thứ do hệ thống xây dựng tạo ra trong quá trình biên dịch.
Hoặc có thể tôi lười biếng / ngớ ngẩn / ngu ngốc và đưa nó vào một tệp ( ví dụ rất giả tạo):
const noexcept;
và sau đó tôi làm
class foo {
void f1()
#include "stupid.file"
int f2(int)
#include "stupid.file"
};
Một ví dụ khác, ít có nội dung hơn một chút, sẽ là một tệp nguồn trong đó nhiều hàm cần sử dụng một lượng lớn các loại trong một không gian tên, nhưng bạn không muốn chỉ nói using namespace foo;
toàn cục vì điều đó sẽ phân biệt không gian tên chung với nhiều thứ khác bạn không muốn. Vì vậy, bạn tạo một tệp "foo" chứa
using std::vector;
using std::array;
using std::rotate;
... You get the idea ...
Và sau đó bạn thực hiện việc này trong tệp nguồn của mình
void f1() {
#include "foo"
}
void f2() {
}
void f3() {
#include "foo"
}
Lưu ý: Tôi không ủng hộ việc làm như thế này. Nhưng nó có thể và được thực hiện trong một số cơ sở mã và tôi không hiểu tại sao nó không được phép. Nó không có mục đích sử dụng của nó.
Cũng có thể là tệp bạn đưa vào hoạt động khác nhau tùy thuộc vào giá trị của ( #define
các) macro nhất định . Vì vậy, bạn có thể muốn bao gồm tệp ở nhiều vị trí, sau khi lần đầu tiên đã thay đổi một số giá trị, vì vậy bạn sẽ có hành vi khác nhau trong các phần khác nhau của tệp nguồn của mình.
#ifdefs
trong đó. Vì vậy, bạn có thể nói#define MODE_ONE 1
và sau đó#include "has-modes.h"
, và sau đó#undef MODE_ONE
với#define MODE_TWO 1
và#include "has-modes.h"
một lần nữa. Bộ tiền xử lý không có khả năng hiểu biết về những thứ này, và đôi khi chúng có thể có ý nghĩa.