Имам някакъв клас за специфични цели за отстраняване на грешки, така че го използвам само когато се интересувам от дадена функционалност
за да предотвратя изходния боклук, когато не е необходим, се опитах да се справя с него чрез препроцесор, така че структурата е нещо подобно:
===main.cpp===
#define nowUseTmp
#include "tmp.h"
/*normal code which accesses tmp via macros*/
===EOF===
===tmp.h===
#ifdef nowUseTmp
/* class declaration */
/* macros to use static methods on class*/
#else
/*empty macro variants, so they may freely stay in code where needed*/
#endif
===EOF===
===tmp.cpp===
/*EXPECTED PLACE OF PROBLEM*/
#ifdef nowUseTmp
/* definitions */
#endif
===EOF===
проблемът е, че когато активирам nowUseTmp (преди the_very_first/each include), линкерът отчита неразрешен външен (като ако макросът е дефиниран в заглавката и НЕ е дефиниран в cpp файла)
Въпрос: Защо / Как / Какъв е по-добрият подход
Очаквам, че cpp файловете се превеждат индивидуално, без познаване на веригата за включване (по този начин не може да има информация за дефинирането)
така ли е Ако е така, как да заобиколно решение, така че да мога да имам постоянни файлове "tmp.*" между множество проекти и да управлявам активирани/деактивирани индивидуално за всеки проект (т.е. да не използвам define в съответната заглавка)
Само да поясня
-> когато поставя "#define tmpUseNow" в съответния хедър (tmp.h), всичко работи добре
->съответната заглавка (tmp.h) е включена от съответния дефиниционен файл (tmp.cpp)
->същото поведение, тествано с опростен проект само с три файла, както в примера
-> съответните файлове (tmp.h, tmp.cpp) се предполагат постоянни файлове, споделени между много проекти (така че не виждам как да им наредя да включват предварително определен трети файл с дефиниции, който би бил индивидуален за проекти, които ги използват)
nowUseTmp
във вашия изходен файл, а го предайте на вашия компилатор, напр.-D nowUseTemp
за GCC или го добавете към настройките на вашия проект във Visual Studio. - person Johannes S.   schedule 26.01.2014