Domanda

(Un caso di più di fare affidamento su un IDE)

Ho qualche codice legacy C che compilo come C ++ a scopo di test Unit. Il sorgente C è C ++ a conoscenza in quanto condizionalmente definisce in base all'ambiente.

es. (PRIVATE decide di static):

#if!defined __cplusplus
#define PRIVATE1 PRIVATE
#endif

...

PRIVATE1 const int some_var;

Il problema è che proprio non riesco a scoprire cosa PRIVATE1 risolve o si trova in C ++, il compilatore si lamenta di ridefinizione se posso aggiungere una dichiarazione, ma non indica dove?

Ho cercato il mio MinGW / GCC include il percorso, la specifica C ++ ISO ei libri C ++ a mia disposizione è stata senza alcun risultato.

Modifica:

Certo che ho controllato la linea di comando e makefile prima dell'inserimento.

È stato utile?

Soluzione 4

Eclipse C ++ gestite progetto sono un po ', beh stupido!

Se un progetto è dichiarato C ++ si basa ancora è costruire su estensione del file, quindi .h file di pre-elaborato come C e non C ++ intestazione che tira in un #define PRIVATE1 da un altro file di intestazione simile avvolto da:

#ifdef __cpluplus.

Il progetto viene poi collegato da g ++.

Altri suggerimenti

Non c'è niente di simile in ISO C ++ spec. Molto probabilmente, PRIVATE1 (così come PRIVATE) sono definiti in altre parti del progetto. Si noti che questo non ha bisogno di essere un #define in un file .h - può anche essere definito tramite le opzioni del compilatore nel makefile. Io suggerirei di fare un grep completa sulla directory del progetto.

Se PRIVATE1 decide di PRIVATE, e PRIVATE decide di static, poi decide di PRIVATE1 static.

E 'improbabile (ma non impossibile) che essi sono definiti da MinGW sé. Macro definite dal C ++ o C attuazione dovrebbe iniziare con un trattino.

La cosa migliore è quello di guardare l'output del preprocessore. Non hai inviare quale compilatore che si sta utilizzando, ma se si controlla la documentazione, la maggior parte hanno la possibilità di "pre-elaborazione di file" che creerà un file con tutte le macro sostituiti. Questo potrebbe essere in grado di aiutare a capire cosa sta succedendo. In Visual Studio si utilizza l'opzione / E (in C / C ++ -> Preprocessor-> Genera file pre-elaborato) che si trasformerà in foo.c foo.i. Questo file sarà generalmente enorme rispetto al file sorgente originale, in modo da scorrere verso il basso per vedere il codice.

Molto probabilmente in C ++ è definito in modo da, beh, "privato:".

Si può dichiarare una funzione con PRIVATE1? Se è così, basta scrivere una funzione in questo modo:

PRIVATE1 void Foo() {
    // __FUNCSIG__ in Visual Studio, not sure about GCC
    std::cout << __FUNCSIG__ << std::endl;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top