Ну а я вам такую штуку про оптимизации расскажу. Для меня было большим удивлением. Работаю под MS VS2008 C/C++. Имею библиотеку функций, подключаемую к проекту. Появилась идея написать некий простенький модуль, который выводил бы мне на консоль версию и дату последних изменений файлов библиотеки в svn, и аналогичные модули поместить во все библиотеки, используемые в проекте.
Делаем файл revision.h
Код
#ifndef __REVISION_H__
#define __REVISION_H__
#define REV_STRING 888
#define DATE_STRING "11:11:11 22-11-2010"
#define LIB_NAME "aaa.lib"
#endif //__REVISION_H__
файл crevision.h
Код
#ifndef _CREVISION_H_
#define _CREVISION_H_
#include <stdio.h>
#include "revision.h"
class CRevision
{
public:
CRevision()
{
printf("LIB :: %s, Rev.%d [%s]\n", LIB_NAME, REV_STRING, DATE_STRING);
}
};
#endif // _CREVISION_H_
и, наконец, crevision.cpp
Код
#include "CRevision.h"
const CRevision caaa;
Во всех книгах по C++ написано, что
для переменной гарантировано будет вызван конструктор. Так вот: фига с два. Основная программа никогда не обращается к
caaa, ее благополучно "соптимизировали" компилятор/линкер.
Если в основной программе объявить
Код
const CRevision caaa;
все работает.