У меня есть класс для конкретных целей отладки, поэтому я использую его только тогда, когда вы заинтересованы в заданной функциональности
чтобы предотвратить исходный мусор, когда это не нужно, я пытался обработать его препроцессором, поэтому структура выглядит примерно так:
===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 будут переводиться индивидуально, без знания цепочки include (таким образом, не может быть информации об определении)
Это так? Если да, то как обходиться, поэтому я могу иметь постоянные "tmp. *" Файлы между несколькими проектами и управлять включенными/отключенными отдельно для каждого проекта (т.е. Не использовать определение внутри соответствующего заголовка)
Просто для уточнения
→ когда я помещаю "#define tmpUseNow" внутри соответствующего заголовка (tmp.h), все работает нормально
→ соответствующий заголовок (tmp.h) включен из соответствующего файла определения (tmp.cpp)
→ то же поведение, протестированное с упрощенным проектом, с тремя файлами, как в примере
→ соответствующие файлы (tmp.h, tmp.cpp) предполагаются постоянными файлами, разделяемыми между многими проектами (поэтому я не вижу, как упорядочить их, чтобы включить предопределенный третий файл с определениями, которые будут индивидуальными для проектов, которые их используют)
Да, каждый файл cpp обрабатывается независимо. Если бы я был вами, я бы включил tmp.h в tmp.cpp, и я бы всегда определял nowUseTmp в tmp.h.
nowUseTmp
в исходном файле, а передавайте его компилятору, например-D nowUseTemp
для GCC, или добавляйте его в настройки проекта в Visual Studio.