2014-06-17 12 views
5

Sto lavorando a modifiche minori a un progetto C++ multipiattaforma con un makefile Linux a 400 linee creato da qualcun altro anni fa."-dndebug" (in minuscolo) fa qualcosa in g ++?

Due righe nel makefile usano -dndebug (in minuscolo) come argomento da riga di comando per g ++.
Penso che l'intenzione fosse quella di definire il simbolo ndebug, ma l'argomento fa anche qualcosa quando è minuscolo?

Ho una conoscenza minima di g ++ e make ma, passando dalla pagina collegata qui sotto, penso che l'argomento debba essere il maiuscolo per funzionare.
http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html

+1

gcc ha infatti l'opzione '-d', ma è per il debug del compilatore che passa se stesso. Non ne hai bisogno. E anche se era previsto, '-dndebug' non è valido (ma ad esempio' -da' è). Quindi suppongo che dovrebbe essere '-DNDEBUG', ma qualcuno lo ha incasinato. – keltar

+1

Per chiunque stia modificando questa domanda: Penso che una modifica che ha cambiato "dndebug" in "DNDEBUG" nel titolo fosse inappropriata, poiché l'intero punto della domanda era chiedersi se fa qualcosa in minuscolo. –

risposta

6

E 'abbastanza facile da prova:

$ cat test.cpp 
#include <iostream> 

int main() 
{ 
#ifdef TEST_DEFINE 
    std::cout << "defined" << std::endl; 
#endif 
    return 0; 
} 

$ g++ -o 1 -DTEST_DEFINE test.cpp 
$ ./1 
defined 
$ g++ -o 2 -dTEST_DEFINE test.cpp 
cc1plus: warning: unrecognized gcc debugging option: T [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: E [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: S [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: T [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: _ [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: E [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: F [enabled by default] 
cc1plus: warning: unrecognized gcc debugging option: E [enabled by default] 
$ ./2 
$ 

Quindi, come potete vedere l'opzione -d provoca in realtà avvisi del compilatore in modo che appaia come -D è ciò che si intendeva.

+0

Ah, questo spiega i quattro avvertimenti che vedo vicino alla fine del processo. Non avevo collegato quegli avvertimenti a quell'argomento, anche se sono sorpreso che "e" e "u" siano gli unici caratteri che appaiono non riconosciuti. Grazie. –

13

Sì, dovrebbe essere maiuscolo come questo -DNDEBUG.

-D è l'opzione GCC per definire una macro. NDEBUG è la macro da definire per disattivare gli asserti come richiesto dallo standard C.

Ho una conoscenza minima di g ++ e make ma, passando dalla pagina collegata qui sotto, penso che l'argomento debba essere il maiuscolo per funzionare.

Per quanto riguarda -dndebug, dal momento che le macro sono case-sensitive, penso che non avrà alcun effetto vale a dire si dovrebbe ottenere ignorato, a meno che non v'è un codice che avete che i riferimenti di esso.