Domanda

Guardando una base di codice open source mi sono imbattuto in questo codice:

#include "StableHeaders.h"
#include "polygon.h"
#include "exception.h"
#include "vector.h"
...

Ora StableHeaders.h è un'intestazione precompilata che è inclusa da un cpp 'control' per forzare la sua generazione. I tre include che compaiono dopo l'intestazione precompilata sono comunque inclusi nel file StableHeaders.h. La mia domanda è: questi file sono inclusi due volte in modo che la base di codice si basi su compilatori che non supportano le intestazioni precompilate? Come presumo che includa la protezione delle guardie / la memorizzazione nella cache dell'intestazione renderà i multipli inclusi ridondanti comunque ...

EDIT tra l'altro, il file stableheaders.h ha un controllo per win32 (approssimativamente), quindi suppongo che le inclusioni all'interno di stableheaders.h non saranno incluse nei compilatori che non supportano le intestazioni precompilate.

È stato utile?

Soluzione

I compilatori che non supportano le intestazioni precompilate includerebbero solo StableHeaders.h e lo ripasserebbero ogni volta (anziché utilizzare il file precompilato). Non causerà alcun problema, né risolverà alcun problema per alcuni compilatori come richiesto. Penso che sia solo un piccolo "errore" che probabilmente si è verificato nel tempo durante lo sviluppo.

Altri suggerimenti

Penso che tu stesso abbia risposto alla domanda! Le intestazioni precompilate sono una funzionalità del compilatore. Se è presente la protezione, le intestazioni non verranno incluse due volte, in ogni caso.

L'unica ragione a cui riesco a pensare per proteggere l'intestazione precompilata e includere comunque le cose è la velocità. Il motivo per usare le intestazioni precompilate è quello di accelerare i tempi di compilazione, questo funziona includendo e compilando il contenuto dell'intestazione precompilata, quando lo fai puoi includere le intestazioni che vengono utilizzate solo dal 75% dei file di origine ed è ancora più veloce di nessun header precompilato.

Tuttavia, se le altre piattaforme non supportano le intestazioni precompilate, si desidera includere solo i file di intestazione richiesti per questo file di origine. Quindi, se l'intestazione precompilata contiene i file include che sono richiesti solo da alcuni file sorgente, è più veloce includere e compilare solo i file di intestazione necessari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top