Derleyiciye göre farklılık gösteren bir sınır vardır.
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).
Bölüm 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
Böylece standart durumları uygun uygulamalar en azından desteklemelidir [C standart]) (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf) bölümünde 6.10.2 kaynaktan
15 seviyeleri derin, ama muhtemelen daha fazla.
Uygulamada, içerme dosyalarınızda bir döngü ile sonuçlanmadıkça, muhtemelen böyle bir sınıra ulaşmayacaksınız.
Örneğin bunu yaparsanız:
main.h:
#include "main.h"
extern int x;
main.c:
error: #include nested too deeply
:
#include <stdio.h>
#include "main.h"
int x = 2;
int main()
{
printf("x=%d\n",x);
return 0;
}
gcc size aşağıdaki hatayı verecektir
Benim durumumda (gcc 4.8.5) Ortaya çıkmadan yaklaşık 200 katı geçti. Ayrıntılar için bkz. the gcc preprocessor manual, section 11.2.
MSVC için, 10 (see here) kapsam dahilinde bir derinliği destekler. Bunun, MSVC'nin standart uyumlu bir derleyici olmadığı (başka nedenlerden dolayı) anlamına geldiğini unutmayın.
C++ ile ilgili bir soru: http://stackoverflow.com/questions/12125014/are-there-limits-to-how-deep-nesting-of-header-inclusion-can-go. Cevaplardan biri, en az 256 iç içe geçmiş kapsamı için destek gerektiren, ancak zorunlu olarak gerektirmeyen C++ standardından bir teklif verir. Birçok uygulama, daha derin bir yuvalamayı destekler. –