2010-02-08 2 views

risposta

50

Luogo ovunque:

#ifndef DEBUG 
#error Only Debug builds are supported 
#endif 
3

Se si vuole semplicemente per segnalare un errore:

#ifdef RELEASE 
    #error Release mode not allowed 
#endif 

funziona con la maggior parte dei compilatori.

4

È possibile utilizzare una direttiva error per quello. Il seguente codice genera un errore in fase di compilazione, se DEBUG non è definito:

#ifndef DEBUG 
#error This is an error message 
#endif 
+0

Mi dispiace, mescolare pragma ed errore durante la digitazione. Corretto nella risposta. –

13

C fornire una dichiarazione #error, e la maggior parte dei compilatori aggiungere un'istruzione #warning. The gcc documentation recommends per citare il messaggio.

+1

@Antonio Giusto, non c'è [più] raccomandazione lì. Ho sostituito il link con uno per gcc doc. – philant

6

Forse qualcosa di più sofisticato, ma è solo copia & incolla di soluzioni precedenti. :-)

#ifdef DEBUG   
    #pragma message ("Debug configuration - OK") 
#elif RELEASE 
    #error "Release configuration - WRONG" 
#else 
    #error "Unknown configuration - DEFINITELY WRONG" 
#endif 

P.S. C'è anche un modo come generare avvertimenti. Crea labe senza riferimenti come

HereIsMyWarning: 

e non fare riferimento a esso. Durante la compilazione si otterrà avviso come

1>..\Example.c(71) : warning C4102: 'HereIsMyWarning' : unreferenced label 
1

Per GCC e Clang (e probabilmente qualsiasi compilatore che supporta la funzione _Pragma) è possibile definire una macro:

#if ! DEBUG 
#define FIX_FOR_RELEASE(statement) _Pragma ("GCC error \"Must be fixed for release version\"") 
#else 
#define FIX_FOR_RELEASE(statement) statement 
#endif 

È possibile utilizzare questa macro per hack temporanei , ad esempio per aggirare il codice che un collaboratore non ha ancora scritto, per assicurarsi di non dimenticare di sistemarlo una volta che si desidera rilasciare una build al pubblico. In entrambi i

FIX_FOR_RELEASE() 
// Code that must be removed or fixed before you can release 

o

FIX_FOR_RELEASE(statement that must be removed or fixed before you can release); 
1

In Code :: Blocks, se non si desidera che la modalità di rilascio, è possibile eliminare la modalità di rilascio. Per fare ciò, fare clic sul menu Progetto, selezionare Proprietà ..., e nella scheda Compiti obiettivi è possibile fare clic su Rilascia e quindi fare clic sul pulsante Elimina. L'eliminazione della modalità di rilascio lo fa solo per il progetto corrente, quindi è ancora possibile utilizzarlo in altri progetti.

In caso contrario, se si vuole veramente utilizzare il preprocessore, si può fare questo:

#ifdef RELEASE 
#error "You have to use the Debug mode" 
#endif