ПредишенСледващото

Къде да получите добри книги за C ++?

На вкус и цвят на другари там.
Независимо от това, наистина добри книги за начинаещи не е много в общия боклук.
Лично ми хареса:

За Linux, докато съответната литература аз не знам.

Създаване на проект, свързващ Irrlihta код :: блокове
?PAGE_ID = 497

Върнете се в началото

Често задавани въпроси (FAQ) - създаване на игра, изследователи

Какво е SVN / Subversion и как да го използвам? Къде да намерим безплатен уеб хостинг SVN?

Върнете се в началото

Често задавани въпроси (FAQ) - създаване на игра, изследователи

Каква е минималната проекти за безопасност на C ++? (Конзолата)

I. Тя трябва да бъде написана с използването на изключения и SEH (win32) "произход" и ЦНТБ (C ++). или използване на F-ции превключване ЦНТБ с изключение на Република SEH в режим на поддръжка.

II. Както и с помощта на по-малко богат, но по някаква причина, малко известен набор от C ++ предпроцесорни макроси като
__LINE__ - текущия ред на код,
__FILE__ - система пътя към текущия файл / модула
__FUNCTION__ - името на F-нето в организма, което е макро Препроцесорът.

III. Освен това аз лично мисля, че ще обучат начинаещите C ++, трябва да започнете от това (просто отстраняване на грешки: изключения (и двете разновидности) + 3 Това макро).

(Всички примери са събрани при win32 MinGW + codeblocks)
Примерен код "универсален грешка" C ++:

Пример UEF (необработено изключение функция). F-ТА победа API позволява контрол SEH изключения:

Окончателният проект подготвени за кодиране с максимално облекчение "догонване грешки."

Публична настояване уведоми, че всички инструменти, показани тук, се използват за проследяване и коригиране на грешки, а не да се преодолее грешките, когато те се съхраняват, а не за постигане на здраве програма пълнени с грешки.

Посъветвани да са внимателни при използване SEH-капани по време на освобождаване версия (Release) настройки компилация / компилация (препоръчително да забраните на оптимизатор за скорост, или да го постави в по подразбиране, за да SEH продължава да бъде хванат в Release "период." Но това е може би за VC ++, как работи в codeblocks не е ясно.

Единият вариант C ++ минимален безопасен проект:

Освен minimal.zip main.cpp проект съдържа min_dbg.h и win_dbg.h (4.79 KB) 185 сваляния

+
Ще Ви бъда благодарен, ако някой от модераторите ще добави съответната информация за Linkous / Unix.

Върнете се в началото

2. Изчисляване на идентификатора на местната клас:

__COUNTER__ да работи правилно в разделението на файл двойката * .h / *. Cpp да код :: блокове могат да изискват някои допълнителни стъпки.
1. Трябва да се остави само 1 Build Цел:
RMB по проекта -> свойства. -> Изграждане на раздела цели.
И махнете чавки от всички файлове с изключение на * .cpp main.cpp (на този основен чавка може (трябва) да напуснат).

2. И още може да се наложи (и не може да се наложи) ПКМ на всички * .cpp файлове проект-> свойства-> раздел която живееше> махнете "Линк досие".
(Essence на тези действия е, че всичко, което трябва първо да бъдат събрани в един текстов файл, а след това натиснете на файла обект, в противен случай __COUNTER__ правилно няма да работи).

3. Излишно е да казвам, че във всички * .h файловете на проекта трябва да бъдат отстранени знамена "Линк досие" и "Събиране на файла".
Но това е по подразбиране трябва да бъде и просто трябва да се нормално компилация.

4. Методът за преодоляване на ограниченията __COUNTER__

В булото и няколко хакер "дъб" опция автоматизация на изчисленията ID (не е съвместима с всяка частична шаблон специализация или дори с часове, чисто глобална, и т.н.)

3. Изчисляване на библиотеката, вижте ID. 2 връзка по-рано в тази статия.
Едновременно с това, проектът е в близост до минимум проекта победа API. И е подходящ за изграждането на OGL, DirectX и подобни проекти на тяхна основа.

4. Идентификация Irrlihte.
За повече информация за битови операции.
Irrliht използва за psevdof-ЛИЗАЦИЯ MAKE_IRR_ID образуването ID makrosnuyu ( "М", "Y" и "г") 4-байт низ "директно" превръщат в цифров вид ID 4 байта.
например:

Върнете се в началото

Често задавани въпроси (FAQ) - създаване на игра, изследователи

Как да зададете входната точка. в VC ++ и MinGW + codeblocks.

weaknessforcats написал (а): Проверете опциите за връзка. Там обикновено е опция, където можете да зададете функцията за входна точка. Основната () е само по подразбиране.
Ако използвате Visual Studio.NET изберете проект имоти-> Конфигурация Properties-> линкер> Advanced и от дясната страна на прозореца е място за името на функцията за входна точка.

Проверете опциите за връзка. Обикновено има опция където можете да настроите функцията за входна точка. Main () просто по подразбиране.
Ако използвате Visual Studio.NET vybberite
проект имоти-> Конфигурация Properties-> линкер> Advanced
и в панела за дясната част на прозореца има място за името на входната точка на функция.

(За VC ++ / VS не изпитва) [/ спойлер]
MinGW + codeblocks (ССЗ)
[Спойлер]

JosAH написал (а): За ССЗ опитате "-е "Флаг да направите своя програма старт в
вместо "основният" входна точка по подразбиране.
сърдечни поздрави,
Jos

За да се опитате да използвате ССЗ свързваща флаг "-е "За да зададете входната точка на програмата
вместо "основен" влизане подразбиране точка.
Най-добри пожелания, Jos

Грег Chicares написал (а): В ситуации като вашата, че би било по-лесно и по-устойчива към
има един прост име. Ето защо C ++ осигурява "ученик" C ". ако
ти пиша
екстернант "С" е невалидна ();
след това е () "името не ще бъде" разкъсаните "- това ще бъде същото име
че компилаторът ще използва за тази функция:
невалидни е (свободен);
в програма C.

Това име е "_f", с префикс "_", защото това е нормално
конвенция за C връзка, за всички компилатори за тази платформа.

И за да добавите представката "_" за "_f" на име е необходимо, тъй като това е конвенция [споразумение] С езика на облигации [свързване / свързващи], по един за всички компилатори на тази платформа на.

Послепис По този начин всички трябва да са наясно, че като иска собствената си точка влизане в програмата, трябва да поеме изпълнението на "правото" да се върне в системата.
Това не винаги е лесно, често опасни и отнема много време. Тя показва, кодът не като ръководство за действие (много по-изгодно да си останат основните входни точки и "по подразбиране"), и за да се разбере по-добре механиката на C ++.
На нас ни трябва за изпълнението на входните пунктове в Dll. И да се разбере prichny който "по подразбиране, например" за DLL от codeblocks "някак си" не работи. [/ Спойлер]

Върнете се в началото

Често задавани въпроси (FAQ) - създаване на игра, изследователи

Как да се справим с DLL (създаване / свързване) :? В VC ++ и MinGW + codeblocks.

Тази книга изследва механизма на DLL да работя с него. И в информацията за интернет на VC ++ много.

Но как да се справят с DLL в MinGW + codeblocks - тази информация не е много и това е много лошо.
Защото аз споделят опита си. Опитът "мирянин Принудени да се справят с него."
Трилър "Трудностите с kotorymya срещнаха и създадоха DLL проект MinGW":
[Спойлер] I. Създаване на проект DLL.
Създаване на динамичен проект библиотека в Код: блокове + MinGW:
File-> новообза-> проект-> Dynamic Link Library
и по-нататък чрез стандартни процедури.

Създадена на Преди 2 файла "main.cpp" и "main.h"
Входната точка се създава автоматично от DllMain на проекта, е-ТА по този начин:

Най-вероятно всичко е наред да се компилира. Създаден 2 файла * .dll и * .a. * .a файл трябва да се зададе в опциите на свръзката по обичайния начин:
RMB по проекта -> Изграждане Options. -> Advanced раздела Настройки Линкерни
Линк библиотеки и добавете пътя към "желания библиотеката."

A * .dll могат да бъдат поставени в близост до ekseshnikom приложение. Или да се пренасочи пътя на генерирания DLL файл в опциите на компилатора:
RMB по проекта -> Properties. -> Advanced таб Изграждане Цели -> Output файла поле
Въведете тук пътят към * .exe програмните файлове.

"Vorkspeys" комбиниране на двата проекта в един от codeblocks да създадете, като щракнете върху него и изберете PCM "Save As" (vorkspeys е по-висока, отколкото в началото на отворения проект). Вземете два проекта, за да може просто да vorkspeysu отворен codeblocks-ти проект, която сте създали по-рано.

Всички други е-ТА на "DLL износ" трябва да декларират ги посочили като ученик "C" и __declspec (dllexport). Това добре се вижда от код "по подразбиране", генерирана:

С оглед на информацията от последния пост по смисъла на този пост трябва да бъде по-ясно за вас. Всички "износа" Fct обявен за C-shnye. С всички последствия. (Недружелюбни към класове, Статичните променливи, както и на новия оператор, макар и недружелюбен към нов или изчистване лежи по-дълбоко)
В този случай, ученик "C" е-ТА може лесно да съдържат вградени C ++ Fct доста приятелски чипове C ++, и това е нормално.

По-подробно, кухня DLL няма да бъдат разглеждани (най-малко трябва да е ясно), които се интересуват по-подробно вижте книгата на Дж Рихтер.

II. Окачването DLL към проекта.

Динамична връзка библиотека може да се свърже по 2 начина:
1 или предписването на пътя на създаването на * .lib или * .a + свързване * .h файл #include Libre чрез. Така че поставянето на DLL в проекта. Има възникнат проблеми не трябва да бъде, особено ако се свърже с всички на проекта въз основа на една и съща компилатор, който създаде DLL.
2 или "директно" (без * .lib или * .a) като се използва

2. __stdcall е "споразумение за различни платформи." А Polusishnopaskalnoe. На теория, библиотека, състояща се от р-ции __stdcall трябва да има същия апетит "яде" различни компилатори, различни езици, и така нататък (което е и причината всички износ Fct делфин или обявен obyavlyutsya като stdcall)
Добавя име Fct Chukhnov типа "@ 4", например:
SomeFunction @ 4

Долна черта (_) е с префикс на името. Името е последвано от знака (@), следвани от броя байтове (в десетичен) в списъка с аргументи. Ето защо, функцията деклариран Int функция (междинно съединение А, двойно б) е декорирана, както следва: _func @ 12

Долна черта (_) е с префикс на името.
За името на следващия знак (@), а след това на броя на байтове в списъка с аргументи (в десетичен). Така, както декларация функция Int функция на (Int на двойно б) е както следва: _func @ 12

За тази Мога само да добавя, че не MinGW добавите долна черта. Защо? Но той добавя.
). С това на megaimeni (кучето и броя) и може да ги накара да, например:

Ако зададете библиотека в опциите на компилатора, а след това се пренасочва към imnenno F-ции обикновено не играят достатъчно стойност podklyucht * .h, * .A посочите файл и да изложат на * .dll до файла EXE. [/ Спойлер]

Върнете се в началото

Както sozdvat сподели раздел DLL в проекти? В VC ++ и MinGW?

Защо?
[Спойлер] Иницииране натоварване DLL достатъчно от около 1 на процеса, но след това DLL "натоварени" във всички процеси в системата.
В процеса на "prisoedneniya" DLL в новия процес, целия модел се създава наново "своите" данни DLL (DLL едно нещо, моделът на данни на този DLL му всеки процес). В този модел и това се изолира от процеса на прилагане към който взаимодействието. И от друга процеси / DLL. Т.е. "По подразбиране" данни отново задействат.
Това означава, че ако дадена променлива в съседна процес nitsiirovana е в текущия процес, той ще бъде "чист" и ще трябва или всеки път отново да започне процес на присъединяване към DLL. Или зададете всички стойности "по подразбиране", без надежда за промяна в процеса на DLL файлове за изтегляне в съседни процеси / приложения.

Можете да се избегне това ограничение, чрез създаване на данни Споделено-сегмент. Тя е такава "обща" зона в паметта (нещо като статични C ++ променливи), който може да пише / чете всички процеси, в които зареден DLL.

В MinGW (ССЗ?).
Според MinGW намерите информация се оказа най-трудно.
За да поставите една променлива в Споделено сечение на необходимостта да го декларира със специален атрибут __attribute __ ((раздел ( ". Хладник"), сподели))
например:

Върнете се в началото

Често задавани въпроси (FAQ) - създаване на игра, изследователи

Как да свържете класове | File Модул 1 парче и 2. Всички в 1 * .o?

Забележка:
[Спойлер] Описаната процедура на свързване чрез * .h възможни и използвайки библиотеки (както статични и динамични). Разликата е, че библиотеката трябва да бъде свързан към опциите на свързващите:
RMB по проекта -> Изграждане Options. -> Advanced раздела Настройки Линкерни
Добавяне на пътя към желаната библиотека * .A
Ако библиотеката е динамична, за да сложи ekseshniku ​​* .dll файл
След това, можете да използвате F-ционни / класове картографирани * .h файлове библиотека (разбира се, че библиотеката е роден код, така "за добро" няма часове, а само е-ТА и данни, но можете да получите достъп до класи на автономните чрез * .h). [/ спойлер]

кодови блокове ::
[Спойлер] Karoch Schaub CPP файлове, събрани на картографирани ч (въпреки че той не е бил използван, за да направи това, и да живее добре!) Към Кодекса :: блокове. Но все пак е възможно.
трябва
1. Добавете IP-Ly в проекта. Това може да стане по различен начин mnozhectvom.
Метод 1:
File-> New -> File. -> изберете * .h или * .cpp
В процеса на създаване не забравяйте да сложите отметка
Добавяне на файлове към активен проект
В строителство мишена (и)

И не забравяйте да сложите отметка на отстраняване на грешки / версия.

Метод 2:
RMB по проекта в ляво -> Добавяне на файлове. -> изберете съществуващ файл, за да бъде включена в проекта.

2. Добавяне на файлове към изграждане Цели списък (обикновено тя се добавя там автоматично, но всичко може да бъде) и я поставете върху квадратчето (и че петелът изобщо са):
RMB по проекта -> свойства. -> Изграждане цели раздела -> в прозореца "Изграждане Целеви файлове"
Всички файлове, трябва да бъдат свързани (т.е. топа трябва да бъдат посочени).
3. RMB на файл в полето отляво проекта -> свойства. -> сложи отметка Compile файл и Link файл. (Това ще покаже, че всяка двойка * .h / *. Cpp трябва Кампильо в отделен обект файл)
И не забравяйте да сложите отметка на debag и / или освобождаващ. Задължително. В противен случай kodebloks просто няма да видите файловете.

Сега можете да се свържете на модулите (т.е.. Клас файлове) за заглавията * .h, * .cpp съответно, ще бъде сравнена с тях автоматично.
По-точно * .h ще се сравнява не * .cpp и съгл. * .o - е съставила и otlinkovannye възрази файлове.
Този стил на C ++.

4. За да се върнете всичко обратно (за обекти, натъпкани в един * .o файл, например, за да се kompaknosti а не заслепени от десетината * .o в очите) може да се извърши обратната операция.
това е
RMB върху файла -> свойства. -> Премахване на чавка Линк досие.
А може просто
RMB по проекта -> свойства. -> раздел Build Цели -> в прозореца "Изграждане Целеви файлове" в долната част, за да се отстранят врани с всички, но файла main.cpp

След това трябва да бъдат свързани (или по-скоро дори "свързват" един до друг) за всички модули го * .cpp, са съчетани автоматично * .h те не са. Така че трябва внимателно да се следват връзките между модулите в проекта си. Е, това е по-добре, по-малко възможности за всички видове "неясноти" неясноти "непредсказуемо поведение" и др
В допълнение, всички елементи на проекта / класове ще бъдат записани в един файл main.o
А предпроцесорни макроси, като __COUNTER__ да работят правилно навсякъде, във всеки модул, произволно далеч, предоставяни от main.cpp.
Тя Xi стил.

Е, ясно е, че "стилове" могат да се комбинират. Т.е. някои файлове да направя * .o и чрез * .h. И някои неща, без да споделяте един обект в модула за проект. В зависимост от дизайна / архитектурни планове. [/ Спойлер]

Върнете се в началото

Свързани статии

Подкрепете проекта - споделете линка, благодаря!