Legjobb válasz
Hordozható futtatható
A hordozható futtatható formátum a futtatható fájlok, az objektumkód, a DLL-ek, a FON Font fájlok és más fájlformátum, amelyet a Windows operációs rendszerek 32 és 64 bites verzióiban használnak. A PE formátum egy olyan adatstruktúra, amely a Windows OS betöltő számára szükséges információkat tartalmazza a becsomagolt futtatható kód kezeléséhez.
Ez magában foglalja a dinamikus könyvtár hivatkozásokat, az API export és import táblákat, az erőforrás-kezelési adatokat és a szálakat. -lokális tárolási (TLS) adatok. NT operációs rendszereken a PE formátumot használják az EXE, DLL, SYS (eszközillesztő) és más fájltípusokhoz. Az Extensible Firmware Interface (EFI) specifikáció szerint a PE a standard futtatható formátum az EFI környezetekben.
Válasz
A C forráskód hordozhatósága azt jelenti, hogy amíg a kívánt célplatform van egy működő C fordítója, az újrafordítással áthelyezheti a C forráskódot a célplatformra anélkül, hogy módosítania kellene. Mivel szinte minden célplatformhoz elérhető egy C fordító, a C nagyon hordozható programozási nyelvnek számít.
Ez azt jelenti, hogy egyszerűen a kód C-be írása nem garantálja a hordozhatóságot. Fegyelmet kell gyakorolnia, hogy elkerülje a nem hordozható kód írását. Például az alábbiak bármelyikét végrehajtó kód megírása nem hordozható kódot eredményez:
- Feltételez minden olyan típusú adattípust, amely nem char.
- Teszi feltételezések arról, hogy az adatok hogyan illeszkednek a memóriába és a struktúrákba.
- Feltételezéseket tesz arról, hogy az adatok hogyan rakódnak / töltenek be a struktúrákba.
- Feltételezéseket tesz a bájtok sorrendjéről (big endian vs little endian) .
- Nem szabványos fordítóbővítményt használ, amely nem biztos, hogy minden fordítói megvalósításnál elérhető.
- Nem szabványos könyvtárbővítményt használ, amely nem biztos, hogy minden platformon elérhető.
- Bármely megvalósítás által meghatározott viselkedésre támaszkodik, amely másképpen működhet egy másik fordító megvalósításában.
- Bármely meghatározatlan viselkedést tartalmaz, amely úgy tűnik , hogy egy környezetben működik, de kiszámíthatatlanul viselkedhet egy másik környezetben.
- Bármely API-hívást (alkalmazásprogramozási felület) indít az operációs rendszerhez rendszer, amely nem biztos, hogy minden környezetben elérhető.
- Feltételez bizonyos memóriacímeket (például, hogy egy adott memóriacímet hozzárendelnek egy hardvereszköz-nyilvántartáshoz stb.).
- Feltételez egy mutató méretét, vagy azt, hogy a mutató akkora, mint egy int.
- Feltételezi az argumentumok átadásának módját (a veremben vagy meghatározott regiszterekben).
- Bármely inline összeállítási nyelvű forráskódot tartalmaz.
- A C nyelv legújabb és legnagyobb tulajdonságát használja, amelyet egyes fordítói implementációk még nem támogatnak (és egyes esetekben soha nem is használhatók) támogatott).
- Olyan könyvtárra támaszkodik, amely a fentiek bármelyikét elvégzi.
Ez nem teljes lista.
Ha teheti ” Ne kerülje a nem hordozható kód használatát, a legjobb megoldás az, ha a nem hordozható kódot külön forrásfájlba különíti el. Ezután, amikor mégis új célplatformra kell áthelyeznie a kódot, nagyon világos, hogy a forráskód melyik részhalmazát kell módosítani.