Конфликт макроопределений - PullRequest
1 голос
/ 18 августа 2011

Я сталкиваюсь с этой проблемой.Речь идет не о макро-функциях, а о простой замене строкового макроса.

У меня есть два заголовочных файла

test1.h
#define TEST 123
test2.h
#define TEST 456

Теперь у меня есть программа, включающая оба эти заголовка, но я хочу, чтобы мойна самом деле TEST должен быть 123. Как я могу избежать определения TEST как 456?

Вы можете подумать, что я сумасшедший не просто изменить макрос, но ситуация такова: у меня есть сторонний декодер, который имеетэтот макрос (определенный в test1.h), и есть другой макрос WINAPI (определенный в test2.h).Оба эти файла контролируются другими;Я не должен менять ни одного из них.Мне вообще не нужен test2.h, но я предполагаю, что он неявно включен в какой-то другой заголовок WINAPI.

Итак, кто-нибудь может подсказать, как обойти эту проблему?Перезаписать макрос WINAPI моим сторонним макросом?Или как обнулить определение из заголовка WINAPI в моем собственном коде?Есть ли способ указать, какой заголовок я не хочу включать.

Ответы [ 5 ]

3 голосов
/ 18 августа 2011

Вы можете использовать директиву препроцессора #ifdef, чтобы определить, определено ли TEST для вашего конкретного случая.Или просто #undef сначала.

#undef TEST
#define TEST 123

Поместите это в файл заголовка, где вы хотите, чтобы TEST было 123, а не 456. Кроме того, это должно быть до test1.h.

2 голосов
/ 18 августа 2011

Вы можете отменить его, если включите оба заголовка в свой файл как:

//yourfile.cpp

#include "test2.h"  //include this before test1.h

#undef TEST   //this undefines the macro defined in test2.h 

#include "test1.h"  //now this defines a macro called TEST which you need
2 голосов
/ 18 августа 2011

#undef TEST после включения test2.h и до включения test1.h.Это немного хак, поскольку вы не можете исправить имена макросов.

1 голос
/ 18 августа 2011

Попробуйте это:

#include "test2.h"
#undef TEST
#include "test1.h"

Это сначала включает test2, сбрасывает его TEST, а затем включает test1.

1 голос
/ 18 августа 2011
#ifdef TEST
#undef TEST
#define TEST 123
#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...