Milyen feltételt és hogyan kell vizsgálni, ha azt akarom, hogy
automatikusan az aktuális rendszerre készüljön a fordítás?
Linux és Windows gcc esetén is érdekel.
- 1723 megtekintés
Hozzászólások
Lehet, hogy félreértelek, de ha nemigen adsz a gcc-nek bizonyos paramétereket, akkor automatikusan az adott rendszerre fordít (pl. a gcc helloworld.c -o helloworld
parancs az adott rendszeren futtatható binárist hoz létre).
Vagy nem erre gondolsz?
- A hozzászóláshoz be kell jelentkezni
Nem. Bizonyos bevasalt stringjeim 32 bites rendszeren char, 64 bitesben wchar_t típusúak kell legyenek. Ide kellene a feltétel figyelés. De közben egy másik fórumon kaptam egy tippet:
#if UINTPTR_MAX == 0xffffffff
/* 32-bit */
#elif UINTPTR_MAX == 0xffffffffffffffff
/* 64-bit */
- A hozzászóláshoz be kell jelentkezni
Ja, értem. Az __i386__
és __x86_64__
makrók nem jók (ha már úgyis gcc)?
- A hozzászóláshoz be kell jelentkezni
Lehet, csak nem ismerem őket...
- A hozzászóláshoz be kell jelentkezni
+1,
Amúgy egy adott rendszeren meg tudod nézni hogy a compiler milyen makrókat definiál a következő paranccsal:
cpp -dM /dev/null
(és akkor kitudod választani a neked tetszőt), de +1 ezekre:
cpp -dM /dev/null | grep x86
#define __x86_64 1
#define __x86_64__ 1
- A hozzászóláshoz be kell jelentkezni
Ha azt akarod elérni, hogy a programod minden platformon ugyanúgy műkdöjön, akkor az stdint.h-ban definiált típusokat kell használni, pl:
uint8_t, int8_t, int16_t, uint32_t, stb...
Ez teljesen standard, nem kell semmi feltételes dolgot írni a kódba. Igazából az alaptípusokat soha nem lenne szabad használni (IMHO), csak ezeket.
Arra kell vigyázni, hogy ez önmagában nem teljesen elegendő, mert műveleten belül a C standard szerint a platform szerinti int méretre (ami lehet 16 32 vagy akár 64 bites is) kiterjeszti a köztes számítási értékeket, és emiatt a számítások végeredménye platformonként eltérő lehet még fix szélességű paraméterek használata mellett is. A kifejezésbe beírt kasztolások megoldják a problémát, ha megvan, de nagyon nehéz megtalálni. Talán valami kódelemző eszköz ki tudja szúrni ezeket a hibákat is.
- A hozzászóláshoz be kell jelentkezni