ho passato molto tempo a cercare di capire il motivo per cui la seguente non sarebbe compilare:C++ come proteggersi dalle macro stdio.h
enum IPC_RC {OK, EOF, ERROR, NEW };
Il messaggio di errore solo detto qualcosa per l'effetto che wasn' Mi aspetto di vedere una parentesi aperta. Non è stato fino a quando ho provato compilarlo su un compilatore più moderno che ho imparato:
/usr/include/stdio.h:201:13: note: expanded from macro 'EOF'
#define EOF (-1)
Così ho finalmente stato bruciato da una macro! :)
Il mio codice non #include <stdio.h>
(Non includo nulla con un suffisso .h), ma chiaramente qualcosa che ho incluso ha comportato l'inclusione di <stdio.h>
. C'è un modo (namespace?) Per proteggermi, senza tracciare esattamente dove è stato incluso?
I 'Basta usare un nome diverso, ma quando si tratta di esso, si ca n #undef. – chris
@chris non vorrei '# undef' it. Vorrei comunque usare un nome diverso poiché le macro sono fondamentalmente una sostituzione di testo. – Rapptz
@Rapptz, non lo farei neanche io. – chris