Attualmente sto implementando il preprocessore simile a NASM per il mio assemblatore e mi chiedo quale sia il modo corretto di gestire i file inclusi ricorsivamente. Da quello che vedo, ci sono due modi per affrontarlo senza appendere il preprocessore o il sistema operativo:
- Imposta la massima profondità di inclusione.
- Non consentire l'inclusione di un file in modo ricorsivo (da non confondere con l'esclusione di un file due volte ).
Inoltre, per quanto posso vedere, il secondo approccio fa essenzialmente lo stesso lavoro, ma produce messaggi di errore più belli. Confronta l'output di Clang, quando si compila il file contenente solo #include "main.cpp"
:
In file included from main.cpp:1:
[ repeated many times ]
In file included from main.cpp:1:
main.cpp:1:10: error: #include nested too deeply
#include "main.cpp"
con questo (il modo attuale di gestirlo nel preprocessore, l'input è simile a quello precedente, fa %include "1.mov.asm"
alla riga 6):
In file /home/griwes/projects/reaverasm/tests/1.mov.asm in line 6:
Error: file '/home/griwes/projects/reaverasm/tests/1.mov.asm' included recursively.
L'approccio che impedisce l'inclusione ricorsiva produce - IMHO - output più leggibile.
La domanda è: esiste una tecnica del preprocessore che verrebbe eliminata impedendo l'inclusione ricorsiva? Questa domanda è indipendente dalla lingua, quindi sentiti libero di fornire esempi da qualsiasi lingua.