Проблема в том, что макроопределение "LIB_CLIENT_NAME" не видно при компиляции stdafx.cpp в строке (1). Вопрос почему? Как в данном случае действует препроцессор? И можно ли реализовать подобное? Заранее спасибо за ответ.
А>Проблема в том, что макроопределение "LIB_CLIENT_NAME" не видно при компиляции stdafx.cpp в строке (1). Вопрос почему? Как в данном случае действует препроцессор? И можно ли реализовать подобное? Заранее спасибо за ответ.
Если ты определил дефайн в файле stdafx.h (#define LIB_CLIENT_NAME "Some project"), а потом подключил some_dll_library.h, то дефайн
#define LIB_CLIENT_NAME "Some project"
не будет виден в some_dll_library.h.
В файле some_dll_library.h будут видны только те дефайны, которые прописаны в нем самом или которые прописаны в файлах, которые он сам включает.
Т.е. чтобы работало надо писать так
И везде, где надо подключать some_dll_library.h, а не stdafx.h.
Re[2]: Загадочные макросы
От:
Аноним
Дата:
30.08.07 16:41
Оценка:
Здравствуйте, slavo, Вы писали:
S>Если ты определил дефайн в файле stdafx.h (#define LIB_CLIENT_NAME "Some project"), а потом подключил some_dll_library.h, то дефайн S>#define LIB_CLIENT_NAME "Some project" S>не будет виден в some_dll_library.h.
S>В файле some_dll_library.h будут видны только те дефайны, которые прописаны в нем самом или которые прописаны в файлах, которые он сам включает. S>Т.е. чтобы работало надо писать так
S>
S>И везде, где надо подключать some_dll_library.h, а не stdafx.h.
Проблема в том, что файл some_dll_library.h включается в разные проекты и хотелось бы задавать LIB_CLIENT_NAME для каждого проекта в отдельности
Здравствуйте, slavo, Вы писали:
S>В файле some_dll_library.h будут видны только те дефайны, которые прописаны в нем самом или которые прописаны в файлах, которые он сам включает.
?!
А как, по-твоему, взаимодействуют assert и NDEBUG?
Здравствуйте, Аноним, Вы писали:
S>>И везде, где надо подключать some_dll_library.h, а не stdafx.h. А>Проблема в том, что файл some_dll_library.h включается в разные проекты и хотелось бы задавать LIB_CLIENT_NAME для каждого проекта в отдельности
//stdafx.h#define LIB_CLIENT_NAME "Some project"
Если пишешь в VS, то в свойствах проекта (Project->Settings->C/C++) можно указать дефайн, свой для каждого проекта или его конфигурации. И потом писать так
//stdafx.h#ifdef MY_FIRST_PROJECT
#define LIB_CLIENT_NAME "My first project"#endif
#ifdef MY_SECOND_PROJECT
#define LIB_CLIENT_NAME "My second project"#endif
Здравствуйте, slavo, Вы писали:
S>Если пишешь в VS, то в свойствах проекта (Project->Settings->C/C++) можно указать дефайн, свой для каждого проекта или его конфигурации. И потом писать так
Да везде так или иначе в свойствах проекта можно определить саму LIB_CLIENT_NAME, или что-то, что её заменяеет
Но лучше бы разобраться что за косяк у тебя такой вышел с stdafx.h...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, slavo, Вы писали:
S>>В файле some_dll_library.h будут видны только те дефайны, которые прописаны в нем самом или которые прописаны в файлах, которые он сам включает.
RO>?!
RO>А как, по-твоему, взаимодействуют assert и NDEBUG?
NDEBUG передается компилятору в виде параметра и виден во всех файлах.
А>Проблема в том, что макроопределение "LIB_CLIENT_NAME" не видно при компиляции stdafx.cpp в строке (1). Вопрос почему? Как в данном случае действует препроцессор? И можно ли реализовать подобное? Заранее спасибо за ответ.
У вас эти два файла используются в Precompiled Header'е?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, slavo, Вы писали:
S>>>В файле some_dll_library.h будут видны только те дефайны, которые прописаны в нем самом или которые прописаны в файлах, которые он сам включает.
RO>>?!
RO>>А как, по-твоему, взаимодействуют assert и NDEBUG?
S>NDEBUG передается компилятору в виде параметра и виден во всех файлах.
Здравствуйте, Roman Odaisky, я писали:
S>>>>В файле some_dll_library.h будут видны только те дефайны, которые прописаны в нем самом или которые прописаны в файлах, которые он сам включает. RO>>>?! RO>>>А как, по-твоему, взаимодействуют assert и NDEBUG? S>>NDEBUG передается компилятору в виде параметра и виден во всех файлах.
RO>
RO>#define NDEBUG
RO>#include <assert.h>
RO>
Ну вот, сразу минусы ставить. Я понимаю, что это далеко не самый красивый способ использовать NDEBUG, но речь не о том. Как, по-твоему, будет работать такой код?
#define NDEBUG
#include <cassert>
int main()
{
assert(0);
}