Gyakran Ismételt Kérdések (GYIK) - létrehozására játék felfedezők

Hol kap jó könyv a C ++?

Az íze és színe elvtársak ott.
Mindazonáltal, nagyon jó könyv kezdőknek nem sok a teljes szemetet.
Személy szerint én szerettem:

Linux, amíg a vonatkozó szakirodalom nem tudom.

Projekt létrehozása, amely összeköti Irrlihta kód :: blokkok
?PAGE_ID = 497

Vissza az elejére

Gyakran Ismételt Kérdések (GYIK) - létrehozására játék felfedezők

Mi SVN / Subversion és hogyan kell használni? Hol talál szabad tárhely SVN?

Vissza az elejére

Gyakran Ismételt Kérdések (GYIK) - létrehozására játék felfedezők

Mi az a minimális biztonsági projekteket C ++? (Konzol)

I. kell írni a használata kivételek és PSZ (win32) „származási hely” és a CRTL (C ++). vagy az f-TIONS kapcsolási CRTL kivéve Köztársaság PSZ karbantartási módban.

II. Csakúgy, mint a kevésbé kiterjedt, de valamilyen oknál fogva, egy kevéssé ismert halmaza C ++ preprocesszor makrókat, mint
__LINE__ - a jelenlegi kódsor
__FILE__ - rendszer elérési útvonal az aktuális fájl / modul
__FUNCTION__ - a név az f-sének a szerv, amely a makro előfeldolgozó.

III. Ezenkívül személy szerint úgy gondolom, hogy tanítsa a kezdő C ++, meg kell kezdeni, hogy a (egyszerű hibakeresés: kivételek (és mindkét fajta) + 3 Ezek macro).

(Minden példák szerint összeállított win32 MinGW + codeblocks)
Mintakódok „univerzális hiba” C ++:

Példa UEF (Nem kezelt kivétel Function). F-CIÓ win API lehetővé teszi a vezérlő PSZ kivételekkel:

A végleges tervezet készült kódolás maximális megkönnyebbülés „fogása hibákat.”

Nyilvános ragaszkodás értesíti, hogy minden eszközt itt bemutatott használt pálya és kijavítani a hibákat, nem legyőzni a hibákat, ha azokat tárolják, és nem, hogy az egészségügyi programot töltött hibákat.

Javasoljuk, hogy legyenek óvatosak a PSZ-csapdák során kiadása (Release) összeállítása / összeállítás beállításai (tanácsos letiltani az optimalizáló a sebesség, vagy tedd alapértelmezett, hogy PSZ továbbra is fogott a Release „időszak”. De ez talán a VC ++, hogyan működik a codeblocks nem világos.

Az egyik lehetőség a C ++ minimális biztonságos projekt:

Továbbá minimal.zip main.cpp projekt tartalmaz min_dbg.h és win_dbg.h (4,79 kb) 185 letöltések

+
Hálás lennék, ha valaki a moderátorok add vonatkozó információkat Linkous / Unix.

Vissza az elejére

2. számítása helyi osztály azonosítója:

__COUNTER__ hogy jól működik a körzetben a fájl pár * .h / *. CPP kódolni :: blokkokat lehet szükség további lépésekre.
1. Ki kell hagynia csak 1 Építés Cél:
RMB a projekt -> tulajdonságok. -> lap Építőanyag célkitűzéseket.
És távolítsa el a csóka az összes fájl kivételével * .cpp main.cpp (ezen fő daw lehet (kell) hagyni).

2. És még szükség lehet (és nem feltétlenül szükséges) PKM egyáltalán * .cpp fájlok projekt-> tulajdonságára> lap build> töröld „Link fájl”.
(Essence Ezeknek az akcióknak, hogy mindent meg először gyűjteni egy szöveges fájlt, majd nyomja be a tárgyat fájlt, különben __COUNTER__ rendesen nem fog működni).

3. Mondanom sem kell, hogy mind a * .h fájlt a projekt el kell távolítani zászlók „Link file” és a „Fordítsd File”.
De ez az alapértelmezett legyen, és akkor csak meg kell normális összeállítása.

4. Az eljárás megszüntetése korlátozások __COUNTER__

A nyúlvány és néhány hacker „tölgy” opciót számítások automatizálását ID (nem kompatibilis vagy részleges template specializáció, vagy akár osztályok, pusztán a globális, stb)

3. számítása a könyvtár, lásd id. 2. linket korábban ebben a cikkben.
Ezzel párhuzamosan a projekt közel van a minimális győzelem API projekt. És alkalmas az építési OGL, DirectX és a hasonló projektek azok alapján.

4. Azonosítás Irrlihte.
További információ a bit műveleteket.
Irrliht használja a formáció ID makrosnuyu psevdof-TION MAKE_IRR_ID ( 'm', 'Y,' i, 'd') 4 byte-os string "közvetlenül" átalakítható egy numerikus ID 4-bájtos típusú.
például:

Vissza az elejére

Gyakran Ismételt Kérdések (GYIK) - létrehozására játék felfedezők

Hogyan kell beállítani a belépési pont. VC ++ és MinGW + codeblocks.

weaknessforcats írta (a): Ellenőrizze a linker lehetőségeket. Általában van egy lehetőség, ahol megadhatja a belépési pont funkciót. main () csak az alapértelmezett.
Ha a Visual Studio.NET kiválasztja projekt tulajdonságára> Configuration Tulajdonságok-> Linker-> Speciális és a jobb oldali a párbeszéd az a hely, a neve a belépési pont funkciót.

Ellenőrizze linker lehetőségeket. Általában van egy lehetőség, ahol beállíthatja a belépési pont funkciót. Main () egyszerűen alapértelmezés szerint.
Ha a Visual Studio.NET vybberite
projekt tulajdonságára> Configuration Tulajdonságok-> Linker-> Speciális
és a jobb oldali panelen, az ablak van egy hely a függvény nevét belépési pont.

(VC ++ / VS nem vizsgáltuk) [/ spoiler]
MinGW + codeblocks (GCC)
[Spoiler]

JosAH írta (a): A gcc próbálja meg a „-e „Flag, hogy a program kezdődik
az alapértelmezett helyett „fő” belépési pont.
Üdvözlettel
Jos

Ahhoz, hogy megpróbáljuk a gcc linker zászló „-e „Ahhoz, hogy állítsa be a belépési pont a program
ahelyett, hogy „alap” alapértelmezett belépési pont.
Üdvözlettel, Jos

Greg Chicares írta (a): Olyan esetekben, mint a tiéd, nem lenne egyszerűbb és erőteljesebb a
Van egy egyszerű név. Ezért a C ++ biztosít 'extern "C'. ha
írsz
extern "C" void f ();
akkor f () „s neve nem lesz»megcsonkított«- ez lesz az azonos nevű
hogy a fordító nem lenne használni ezt a funkciót:
void f (void);
Egy C program.

Ez a név „_F” előtagja „_”, mert ez a normális
Egyezmény C kapcsolási, minden fordítóprogramok ezen a platformon.

És hozzá az előtag „_” a neve „_F” van szükség, mert ez az egyezmény [megállapodás] C nyelven kötvények [összekötő / linker], az egyik az összes fordító ezen a platformon.

Ui így minden tisztában kell lenniük azzal, hogy a kért saját belépési pont a program, akkor vegye át a végrehajtás a „helyes”, hogy visszatérjen a rendszert.
Ez nem mindig könnyű, gyakran veszélyes és időigényes. Ez azt mutatja, a kód nem, mint egy útmutató a cselekvésre (sokkal jövedelmezőbb, hogy felfüggeszti a fő belépési pontok és a „default”), valamint annak érdekében, hogy jobban megértsék a mechanika C ++.
Szükségünk van rá a végrehajtását a belépési pontok a dll. És hogy megértsék prichny amely „alapértelmezett példány” a DLL codeblocks „valahogy” nem működött. [/ Spoiler]

Vissza az elejére

Gyakran Ismételt Kérdések (GYIK) - létrehozására játék felfedezők

Hogyan kell kezelni a dll (létrehozása / csatlakozás) :? A VC ++ és MinGW + codeblocks.

Ez a könyv megvizsgálja a dll mechanizmus működik vele. És az interneten információt VC ++ sokat.

De hogyan kell kezelni a dll a mingw + codeblocks - ez az információ nem sokat, és ez nagyon rossz.
Mert én megosszák tapasztalataikat. Experience „laikus kénytelen foglalkozni vele.”
Thriller „A nehézségek kotorymya találkozott, és létrehozott egy dll projekt mingw”:
[Spoiler] I. létrehozása DLL projekt.
Létrehozása dinamikus könyvtár projekt kód: blokk + mingw:
Fájl-> új-> projekt-> Dynamic Link Library
és a további, standard eljárásokkal.

Létrehozta 2 file "main.cpp" és "main.h"
A belépési pont automatikusan a projekt által létrehozott, az f-CIÓ DllMain, mint ez:

Legvalószínűbb minden rendben kell összeállítani. Létrehozta 2 fájlok * .dll és * .a. * .a fájlt kell beállítani az opciókat a linker a szokásos módon:
RMB a projekt -> Építsd lehetőségek. -> Speciális fül linkerbeállításait
Link könyvtárakat és hozzáadja az utat a „kívánt könyvtárat.”

A * .dll tudunk mellett ekseshnikom alkalmazás. Vagy átirányítani az utat a generált dll fájlt a fordítási beállításokat:
RMB a projekt -> Tulajdonságok. -> Speciális fül Építőanyag Célok -> Output fájlnév mezőben
Írja ide az elérési utat a * .exe programot fájlokat.

„Vorkspeys” egyesíti a két benyúlik egy a codeblocks létrehozhat kattintva, és kiválasztja PCM „mentés másként” (vorkspeys magasabb, mint a felső nyitott projekt). Vedd fel 2 projekt vorkspeysu egyszerűen nyitott codeblocks-edik projekt a korábban létrehozott.

Minden más f-CIÓ a „dll export” kell bejelenteni kijelölésükre extern „C” és __declspec (dllexport). Ezt jól illusztrálja az a kód „default” generált:

Tekintettel az információt az utolsó utáni értelmében, hogy a belépés kellene tiszták. Az összes „kivitel” funkcióban bejelentett C-shnye. Annak minden következményével együtt. (Barátságtalan osztályok, statikus változók és az új szereplő, de barátságtalan új vagy malloc fekszik mélyebben)
Ebben az esetben az extern „C” f-CIÓ könnyen tartalmazhatnak beágyazott C ++ funkcióban igen barátságos chips C ++, és ez normális.

Részletesebben a konyhában dll nem tekinthető (legalább világossá kell tenni), akik érdeklődnek részletesebben lásd a könyv J. Richter.

II. Akasztja DLL a projekthez.

Dynamic Link Library csatlakoztatható 2 módon:
1 vagy előírnák beállítás utat a * .lib vagy * .a + csatlakozó * .h fájlt #include Libre keresztül. Tehát amivel a dll a projektben. Merül fel a problémákat nem lehet, különösen, ha összekapcsolja ellen a projekt alapján ugyanazon fordító, amely létrehozta a dll.
2 vagy "közvetlenül" (anélkül, hogy a * .lib vagy * .a) segítségével

2. __stdcall egy "cross-platform megállapodást." Polusishnopaskalnoe. Elméletileg, egy könyvtár, amely p-TIONS __stdcall meg kell egyeznie az étvágy „enni” a különböző fordítóprogramok, a különböző nyelvek, és így tovább (ezért az összes export funkcióban delfin vagy bejelentett obyavlyutsya mint stdcall)
Hozzáteszi nevét funkcióban Chukhnov típusú „@ 4”, például:
SomeFunction @ 4

Egy aláhúzás (_) jelzi azokat a nevét. A neve után a kukac (@), majd a bájtok száma (decimális) a paraméterek listája. Ezért, a függvény ami int func (int egy, kettős b) díszített a következőképpen: _func @ 12

Aláhúzás (_) jelzi azokat a nevét.
A neve a következő jel (@), majd a bájtok számát a paraméterek listája (decimális). Így, mint egy funkciót nyilatkozatot int func (int a, dupla b) elő a következők szerint: _func @ 12

Ehhez csak azt tudom hozzátenni, hogy mingw nem ad hozzá egy aláhúzás. Miért? De hozzáteszi.
). Ezzel a megaimeni (a kutya és a szám), és okozhat számukra, hogy, például:

Ha megad egy könyvtárat a fordító beállításait, majd átvált imnenno f-TIONS általában nem játszanak értéke elég podklyucht * .h * .a adja meg a fájl, és tegye a * .dll az EXE fájlt. [/ Spoiler]

Vissza az elejére

Ahogy sozdvat megosztott dll részén projektekben? A VC ++ és mingw?

Miért?
[Spoiler] beavatott loading DLL elég néhány eljárás 1., de azután, hogy a DLL „terhelt” az összes folyamat a rendszerben.
A folyamat során a „prisoedneniya” DLL új eljárással, az egész modell jön létre újra a „saját” DLL adatok (dll egy dolog, az adatmodell e dll annak minden folyamat). Ebben a modellben, és ezt izolálhatjuk az alkalmazás folyamat, amelyben a kölcsönhatást. És más eljárások / dll. Ie „Default” adatok újra aktiválódik.
Ez azt jelenti, hogy ha egy bizonyos változó szomszédos nitsiirovana folyamat, a jelenlegi folyamat, akkor „tiszta”, és ez sem lesz minden egyes alkalommal újra megindítja a csatlakozási folyamat a dll. Vagy állítania minden értéket „default”, nincs remény a változás folyamatában dll letöltések szomszédos folyamatok / alkalmazások.

Akkor ezt a korlátozást létrehozásával adatok közös részes. Ez egy olyan „általános” terület a memóriában (olyasmi, mint a statikus C ++ változók), ami lehet írni / olvasni az összes folyamat, amelynek során a terhelt dll.

A mingw (gcc?).
Szerint mingw információt találni kiderült, hogy a legnehezebb.
Elhelyezni egy változót a közös metszete annak szükségességét, hogy állapítsa meg, hogy egy speciális attribútum __attribute __ ((szakasz ( „SHR”), megosztott))
például:

Vissza az elejére

Gyakran Ismételt Kérdések (GYIK) - létrehozására játék felfedezők

Hogyan lehet összekapcsolni osztályok | Fájl modul 1 db és 2 All in 1 * .o?

Megjegyzés:
[Spoiler] A leírt eljárás a kapcsolat révén * .h lehetséges, és segítségével a könyvtárak (mind a statikus és dinamikus). A különbség az, hogy a könyvtár kell csatlakoztatni a kapcsoló beállítások:
RMB a projekt -> Építsd lehetőségek. -> Speciális fül linkerbeállításait
Add az utat a kívánt könyvtár * .a
Ha a könyvtár dinamikus tenni ekseshniku ​​* .dll fájl
Ezt követően, akkor a f-CIÓ / osztályok leképezett * .h fájlok könyvtára (persze, hogy a könyvtár egy natív kód olyan „jó” nincsenek osztályok, csak f-CIÓ és az adatok, de elérheti az egység osztályok keresztül * .h). [/ spoiler]

kód :: blokkok
[Spoiler] Karoch Schaub cpp fájl összeállított saját leképezett h (bár ő nem használják erre, és élőben is!) Code :: blokkokat. De még mindig lehetséges.
kell
1. Add ip-ly a projektben. Ezt meg lehet tenni különböző módon mnozhectvom.
1. módszer:
Fájl-> Új -> File. -> select * .h vagy * .cpp
A folyamat létrehozása nem szabad elfelejteni, hogy egy négyzetet
Fájl hozzáadása az aktív projekt
A építmények cél (ok)

És ne felejtsük el, hogy egy négyzetet a debug / release.

2. módszer:
RMB a projekt a bal -> Add fájlokat. -> válasszon ki egy meglévő fájlt be kell ágyazni a projekt.

2. Add files építsünk célok listája (általában ez az ott hozzáadott automatikusan, de bármi lehet), és tedd be a jelölőnégyzetet (és hogy a varjak egyáltalán voltak):
RMB a projekt -> tulajdonságok. -> Építőanyag Célok lapon -> az ablakban „Build célfájlokat”
Minden fájl kell csatlakoztatni (azaz varjak kell tüntetni).
3. RMB egy fájlt a mezőbe balra projekt -> tulajdonságok. -> hogy egy négyzetet Compile fájlt, és egy linket a fájlt. (Ez azt jelzi, hogy minden pár * .h / *. CPP kell Campiglio egy külön objektum fájl)
És biztos, hogy egy négyzetet Debag és / vagy relese. Szükséges. Egyébként kodebloks csak nem fogja látni a fájlokat.

Most már csatlakoztathatja a modulokat (pl. Osztály) fájlokat fejlécek * .h * .cpp illetve lesz, mint nekik automatikusan.
Pontosabban * .h lesz, mint nem * .cpp és acc. * .o - összeállította és otlinkovannye kifogást fájlokat.
Ez a stílus a C ++.

4. Ha vissza mindent vissza (a tárgyak zsúfolva 1 * .o fájl, például annak érdekében, hogy kompaknosti nem kápráztatta el a tucatnyi * .o szemében) végezhetjük a fordított műveletet.
tehát
RMB a file -> tulajdonságok. -> eltávolítás daw link fájlt.
És ha csak a
RMB a projekt -> tulajdonságok. -> lap Építőanyag Célok -> az ablakban „Build célfájlokat” alján, hogy távolítsa el az összes varjak de a main.cpp fájl

Ezt követően meg kell kötni (vagy inkább még a „bind” egymással) az összes modul, amit * .cpp, automatikusan illeszkedik * .h nem azok. Így van, hogy kövesse a kapcsolatot a modulok között a projekt. Nos, ez jobb, kevesebb lehetőséget mindenféle „homályos” félreérthető „kiszámíthatatlan viselkedése”, stb
Ezen kívül minden eleme a projekt / osztályok kerülnek rögzítésre egyetlen fájlban main.o
A előfeldolgozó makrók, például __COUNTER__ fog működni bárhonnan, bármely modul, önkényesen jóval által nyújtott main.cpp.
Ez Xi stílusban.

Nos, nyilvánvaló, hogy a „stílus” lehet kombinálni. Azaz néhány fájlt csinálni * .o keresztül * .h. És néhány dolog megosztása nélkül egyetlen tárgy, amely a projekt modul. Attól függően, hogy a tervezési / építészeti terveket. [/ Spoiler]

Vissza az elejére

Kapcsolódó cikkek