У меня есть некоторый класс для конкретных целей отладки, поэтому я использую его только тогда, когда заинтересован в данной функциональности.
чтобы предотвратить исходный мусор, когда он не нужен, я попытался обработать его препроцессором, поэтому структура примерно такая:
===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), компоновщик сообщает о неразрешенном внешнем (например, если макрос был определен в заголовке, а НЕ определен в файле cpp)
Вопрос: почему/как/какой подход лучше
Я ожидаю, что файлы cpp переводятся индивидуально, без знания цепочки включения (поэтому не может иметь информацию об определении)
Так ли это? Если да, то как обойти это, чтобы я мог иметь постоянные файлы «tmp.*» между несколькими проектами и управлять включением/отключением отдельно для каждого проекта (т.е. не использовать определение внутри соответствующего заголовка)
Просто для ясности
-> когда я помещаю "#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