sto vedendo strani errori quando il mio codice C++ ha min() o max() chiama. Sto usando i compilatori di Visual C++.Strano C++ errori con il codice che ha min()/max() chiama
risposta
Verificare se il codice è compreso il windows.h file di intestazione e sia il vostro codice o altre intestazioni di terze parti hanno un proprio min()/max() definizioni. Se sì, allora anteporre il tuo windows.h inclusione con una definizione di NOMINMAX come questo:
#define NOMINMAX
#include <windows.h>
Ugh ... ambito, amico: std::min()
, std::max()
.
È ancora necessario #definire NOMINMAX o il preprocessore espanderà ancora min e max. – Ferruccio
non l'ho usato in anni, ma dalla spinta di memoria assegna min e max troppo, forse?
Un'altra possibilità potrebbe essere da effetti collaterali. La maggior parte delle macro min/max includerà i parametri più volte e potrebbe non fare ciò che ci si aspetta. Si potrebbero anche generare errori e avvertimenti.
max(a,i++) expands as ((a) > (i++) ? (a) : (i++))L'() per l'espansione sono per evitare problemi se lo si chiama con formule. Prova ad espandere max (a, b + c)afterwards i is either plus 1 or plus 2
Onestamente, quando si tratta di min/max, trovo meglio definire solo la mia:
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))
Che, francamente, sta chiedendo problemi. In C++, usa 'using std :: swap' e scrivi il tuo scambio quando puoi fare meglio del default. In C, per lo locazione scrivere 'min #define (a, b) ((a) <(b) (a): (b))' e assicuratevi di non chiamare con qualsiasi cosa con effetti collaterali, perché avrai una valutazione multipla. –
Dal momento che Windows definisce questo come uno stile di funzione macro, la seguente soluzione è disponibile:
int i = std::min<int>(3,5);
Questo funziona perché la macro min()
si espande solo quando min
è seguita da (
, e non quando è seguito da <
.
- 1. Osservazione del comportamento strano con 'auto' e std :: minmax
- 2. C ricerca # minmax grafico
- 3. Interfaccia con il codice che chiama select()
- 4. un po 'strano codice C++
- 5. Chiama codice C++ da MATLAB?
- 6. In che modo il codice C chiama il codice assembly (ad esempio, strlen ottimizzato)?
- 7. Normalizzazione MinMax in scala
- 8. Codice di verifica unità che chiama VirtualPathUtility.ToAbsolute
- 9. JNI che chiama Java da C++ con più thread
- 10. Che aspetto ha un codice c buono e moderno?
- 11. xampp openssl errori quando si chiama openssl_pkey_new();
- 12. Chiama il codice Scala da Java?
- 13. WinApp in C# che chiama il programma java
- 14. C strano macro sintassi
- 15. Come si chiama una funzione non gestita che ha un carattere [] come parametro OUT da C#?
- 16. Chiama il codice Python da LLVM JIT
- 17. Strano codice uscita
- 18. C# che organizza il mio codice
- 19. Strano C/C++ sintassi
- 20. Spring RestTemplate che richiama il servizio web con errori e analizza il codice di stato
- 21. Codice di test unitario che chiama metodi statici
- 22. Eclipse 3.7 Analisi del codice C/C++ "codan" che segnala errori fasulli
- 23. programma Strano C
- 24. Chiama libreria C++ da C#
- 25. Visualizza sia il codice assembly che C
- 26. Spegnere errori Eclipse (che arent veramente errori)
- 27. Come si chiama JNI_CreateJavaVM senza errori Valgrind?
- 28. C# multithreading Comportamento strano
- 29. Confronto di std :: minmax in coppia
- 30. Convalida Jquery: chiama valido senza visualizzare errori?
Questa è ufficialmente la domanda più strana su Stack Overflow – eplawless