2016-04-06 13 views
5

In C/C++ ho scritto un file di intestazione che è disponibile per tutti, tuttavia voglio limitare i file che lo includono. C'è un modo in cui posso generare un errore del compilatore se i miei file di intestazione sono inclusi in un file c/cxx "non autorizzato"?In C o C++ posso imporre restrizioni su quali file possono includere il mio file di intestazione

+1

Forse, se questo è il caso si dovrebbe ripensare la struttura di codifica? Almeno per 'c', metto solo le funzioni di prototipo dell'interfaccia (le funzioni visibili che altri file/codice intendono chiamare) nel file di intestazione' .h'. Qualsiasi altra funzione interna che deve essere nascosta dall'esterno dichiaro (come 'static') e definisce tutto nel file' .c'. Ma ovviamente non conosco i dettagli della tua situazione o se ciò è rilevante. – yano

+0

Su quale base lo restringerai? Voglio dire, qual è la ragione di un tale requisito? –

+0

È correlato al test dell'unità. Ho bisogno di esporre una classe in un'intestazione in modo che possa essere derisa in un test, ma non voglio che nessun altro (a parte la mia implementazione) lo implementi/sottoclassi. – user194341

risposta

6

Ovviamente non esiste una funzione di sicurezza appropriata per questo (sarebbe semplicemente sciocco), ma ciò che si potrebbe fare è produrre un errore nel file di intestazione se non è presente una determinata macro quando si include il file, quindi che i header.h inizia con

#ifndef AUTHORIZED_TO_INCLUDE_THE_HEADER 
#error "You're not authorized to include this file" 
#endif 

poi nei file che includono questo, fanno

#define AUTHORIZED_TO_INCLUDE_THE_HEADER 
#include "header.h" 
Problemi correlati