Il existe une limite qui diffère en fonction du compilateur.
Dans la section 6.10.2 du [standard C] (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf) :
6 Une directive de prétraitement #include
peut apparaître dans un fichier source qui a été lu en raison d'une directive #include dans un autre fichier, jusqu'à une limite d'imbrication définie par l'implémentation (voir 5.2.4.1).
Section 5.2.4.1:
L'implémentation doit être capable de traduire et d'exécuter au moins un programme qui contient au moins une instance de chacune des limites suivantes :
...
- 15 niveaux d'imbrication pour les fichiers #include
Donc, le standard indique que les implémentations conformes doivent prendre en charge au moins une profondeur de 15 niveaux, mais peut-être plus.
En pratique, vous ne atteindrez probablement pas une telle limite à moins d'avoir une boucle dans vos fichiers inclus.
Par exemple, si vous faites ceci :
main.h :
#include "main.h"
extern int x;
main.c :
#include
#include "main.h"
int x = 2;
int main()
{
printf("x=%d\n",x);
return 0;
}
gcc vous donnera l'erreur suivante :
erreur : #include imbriqué trop profondément
Dans mon cas (gcc 4.8.5), il est allé jusqu'à environ 200 niveaux de profondeur avant de générer une erreur. Voir le manuel du préprocesseur gcc, section 11.2 pour plus de détails.
Pour MSVC, il supporte une profondeur d'inclusion de 10 (voir ici). Notez que cela signifie (entre autres raisons) que MSVC n'est pas un compilateur conforme aux normes.