понедельник, 27 апреля 2009 г.

После регистрации блога автор сабжа безнадёжно свалил на луркмор и читал архивы копипасты.

Однако, хорошо сейчас рассказать, что изменилось за целый день знакомства и написания кода в 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: Стоит отметить, что при вызове препроцесорных директив ощутимо падает скорость компиляции.

Комментариев нет:

Отправить комментарий