Questo approccio probabilmente non funziona da nessuna parte. Poiché c'è una sostituzione in corso dove il VALORE a destra è indefinito.
Ed è malvagio cambiare la macro sostituzione di qualcun altro. Tanto più se si tratta di macro d'ambiente predefinite. Non importa dove sarà alla fine la macro di sovrascrittura, dopo che tutti i file del progetto sono stati assemblati. È meglio definire la propria macro _VALUE.
Vladimir Simakov: Ed è malvagio cambiare la macro sostituzione di qualcun altro. Soprattutto se sono macro d'ambiente predefinite. Non importa dove alla fine, dopo che tutti i file del progetto sono stati assemblati, apparirà l'override della macro. Fareste meglio a definire la vostra macro _VALUE.
Posso chiedere perché non si può usare l'assegnazione di un valore VALUE a una variabile globale e poi moltiplicarlo e sostituirlo nella definizione finale?
Valeriy Yastremskiy: Posso chiedere perché non si può usare un'assegnazione VALUE a una variabile globale e moltiplicarla e sostituirla nella definizione finale?
Si può, ma allora si perde il senso della sostituzione delle macro (sostituire i valori nel codice). Tutta la speranza rimane sul compilatore, che converte il tipo const (avete, tra l'altro, definito il tipo di variabile?) nel tipo c++ constexpr
Ma per il resto, sì, è possibile.
#ifdef MACROS
const int gValue=2*VALUE;
#undef VALUE
#define VALUE gValue
#endif
Questo approccio probabilmente non funziona da nessuna parte. Poiché c'è una tale sostituzione in corso, dove il VALORE a destra non è definito.
A quanto pare, non capisco affatto come funziona il compilatore. Ho immaginato che le stringhe siano analizzate in modo sequenziale. Quindi non c'è nessun valore indefinito a destra:
#define VALUE 10// VALUE = 10#define TMP VALUE // TMP = 10#undef VALUE // VALUE = EMPTY#define VALUE (TMP*2) // TMP = 10, следовательно VALUE = 20
A quanto pare, non capisco affatto come funziona il compilatore. Ho immaginato che le stringhe siano analizzate in modo sequenziale. Quindi non c'è nessun valore indefinito a destra:
Funziona dall'alto verso il basso come la sostituzione del testo. Cioè "TMP" sarà sostituito da "VALUE".
A quanto pare, non capisco affatto come funziona il compilatore. Ho immaginato che le stringhe siano analizzate in modo sequenziale. Quindi non c'è nessun valore indefinito a destra:
Allora perché non funziona?
Molto probabilmente questo approccio non funziona da nessuna parte. Perché c'è una sostituzione in corso dove il VALORE a destra è indefinito.
Questo approccio probabilmente non funziona da nessuna parte. Poiché c'è una sostituzione in corso dove il VALORE a destra è indefinito.
Sì, ed è malvagio cambiare la macro sostituzione di qualcun altro.
Senza quel male, non sarebbe successo.
Ed è malvagio cambiare la macro sostituzione di qualcun altro. Soprattutto se sono macro d'ambiente predefinite. Non importa dove alla fine, dopo che tutti i file del progetto sono stati assemblati, apparirà l'override della macro. Fareste meglio a definire la vostra macro _VALUE.
Posso chiedere perché non si può usare un'assegnazione VALUE a una variabile globale e moltiplicarla e sostituirla nella definizione finale?
Si può, ma allora si perde il senso della sostituzione delle macro (sostituire i valori nel codice). Tutta la speranza rimane sul compilatore, che converte il tipo const (avete, tra l'altro, definito il tipo di variabile?) nel tipo c++ constexpr
Ma per il resto, sì, è possibile.
Ma poi, sì, è possibile.
Non funzionerà con quello.
Non funzionerà con questo.
Questo approccio probabilmente non funziona da nessuna parte. Poiché c'è una tale sostituzione in corso, dove il VALORE a destra non è definito.
A quanto pare, non capisco affatto come funziona il compilatore. Ho immaginato che le stringhe siano analizzate in modo sequenziale. Quindi non c'è nessun valore indefinito a destra:
A quanto pare, non capisco affatto come funziona il compilatore. Ho immaginato che le stringhe siano analizzate in modo sequenziale. Quindi non c'è nessun valore indefinito a destra:
Funziona dall'alto verso il basso come la sostituzione del testo. Cioè "TMP" sarà sostituito da "VALUE".
A quanto pare, non capisco affatto come funziona il compilatore. Ho immaginato che le stringhe siano analizzate in modo sequenziale. Quindi non c'è nessun valore indefinito a destra:
Non è il compilatore - è il preprocessore)
si trasforma in
, e il vostro VALORE è indefinito.