Có giới hạn khác dựa trên trình biên dịch.
Từ phần 6.10.2 của [C chuẩn]) (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf):
6 A #include
preprocessing directive may appear in a source file that has been read because of a #include directive in another file, up to an implementation-defined nesting limit (see 5.2.4.1).
Mục 5.2.4.1:
The implementation shall be able to translate and execute at least one program that contains at least one instance of every one of the following limits:
...
- 15 nesting levels for #included files
Vì vậy, các tiêu chuẩn quốc gia mà việc triển khai phù hợp phải hỗ trợ ít nhất 15 cấp độ sâu, nhưng có thể nhiều hơn.
Trong thực tế, bạn có thể sẽ không đạt giới hạn như vậy trừ khi bạn kết thúc với một vòng lặp trong các tệp bao gồm của bạn.
Ví dụ, nếu bạn làm điều này:
main.h:
#include "main.h"
extern int x;
main.c:
#include <stdio.h>
#include "main.h"
int x = 2;
int main()
{
printf("x=%d\n",x);
return 0;
}
gcc sẽ cung cấp cho bạn các lỗi sau:
error: #include nested too deeply
Trong trường hợp của tôi (gcc 4.8.5) , nó đã đi khoảng 200 cấp độ sâu trước khi nó bị lỗi. Xem the gcc preprocessor manual, section 11.2 để biết chi tiết.
Đối với MSVC, nó hỗ trợ độ sâu bao gồm 10 (see here). Lưu ý rằng điều này có nghĩa là (trong số các lý do khác) rằng MSVC không phải là trình biên dịch phù hợp tiêu chuẩn.
Câu hỏi liên quan đến C++: http://stackoverflow.com/questions/12125014/are-there-limits-to-how-deep-nesting-of-header-inclusion-can-go. Một trong những câu trả lời đưa ra một trích dẫn từ tiêu chuẩn C++ như đề xuất, nhưng không nhất thiết yêu cầu, hỗ trợ cho ít nhất 256 lồng nhau bao gồm. Nhiều triển khai hỗ trợ làm tổ sâu sắc hơn nhiều. –