После регистрации блога автор сабжа безнадёжно свалил на луркмор и читал архивы копипасты.
Однако, хорошо сейчас рассказать, что изменилось за целый день знакомства и написания кода в Visual Studio.
Применен объектно-ориентированый подход к релизации движка. Программа распалась на модули и заголовки.
Обнаружена интерестная особенность компилятора.
Например код
(a.h)
class a
{
foo()
{
//bar
}
}
(b.h)
#include "a.h"
class b
{
b()
{
//foo
}
}
(main.cpp)
#include "a.h"
#include "b.h"
int main()
{
return 0;
}
Отказывается компилироваться, из-за двойного «#include "a.h"» как в «b.h» так и в «main».
Лечится это при помощи директив препроцессора.
#ifndef FOO_H
#define FOO_H
class foo
{
bar()
{
//...
}
}
#endif
Наш предведущий код приймет вид:
(a.h)
#ifndef A_H
#define A_H
class a
{
foo()
{
//bar
}
}
#endif
(b.h)
#ifndef B_H
#define B_H
#include "a.h"
class b
{
b()
{
//foo
}
}
#endif
(main.cpp)
//Теперь при включении заголовочного файла, «а.h» и «b.h», куски кода, которые находятся внутри директивы #ifndef→#define→...→#endif, будут включены только один раз во время компиляции.
#include "a.h"
#include "b.h"
int main()
{
return 0;
}
Без этих директив, компилятор будет выдавать ошибку «Class A redefenitial error», или что-то в этом роде.
udp: Стоит отметить, что при вызове препроцесорных директив ощутимо падает скорость компиляции.