Originariamente inviato da escocat
Allora. (ciao a tutti)
In un progetto Xna abbiamo la possibilità di "attaccare" diversi files *.cs. (bella scoperta). Solo in un caso la GPU fa la schizzinosa con le variabili int, e cioè nella dichiarazione degli indici che occorrono al metodo DrawUserIndexedPrimitives. Ho scoperto che - di per sè - 'int' non vuol dire nulla. Se ci troviamo su un bellissimo modernissimo PC con Windows 7 pagato 10000 euri allora int = System.Int32 (64?). Se invece siamo su un vergognoso scassatissimo vecchio rottame allora int = System.Int16. Ma nel primo PC (quello "buono") è accettato anche il tipo 'int' e basta.
Questa è una sciocchezza. In C# int è sempre un intero con segno a 32 bit, ovvero int = System.Int32 per definizione.*

Il mio consiglio di base è usare semplicemente Int16 (=short) in ogni caso se questo non ti causa particolari problemi. Per il resto, io vedo sostanzialmente due possibilità:
- continui con il metodo dell'ifdef, ma, invece di usare una #define, imposti il tuo flag nelle proprietà del progetto; l'ovvio svantaggio è che hai due eseguibili separati per le due configurazioni;
- usi una variabile object per indices, scegliendo il tipo dinamicamente al momento di creare l'array; questo ovviamente ha un leggero costo a runtime.

---

* La cosa che dici più o meno vale per C e C++, dove int (in genere) è il tipo intero "nativo della piattaforma" (ma non è detto - sulle attuali macchine a 64 bit normalmente i compilatori usano ancora int a 32 bit). Nota che questo non ha nulla a che vedere con quanto il PC sia scassato - anche su un Pentium 1 di 20 anni fa l'int è normalmente a 32 bit se ci installi sopra un compilatore C a 32 bit.