Речь вот о чем: у меня в программе есть участки кода такого вида:
#ifdef IDENT1
....
#endif
#ifdef IDENT2
...
#endif
Таких участков сравнительно много, проблема в том, что если я где-то ошибусь и напишу вместо, скажем, IDENT2 IEDNT2 — то не скомпилируется кусок кода, но сразу это может быть незаметно — просто какая-то функция в программе не будет работать. Вопрос: можно ли определить такой макрос, скажем, #SafeIfDef (A), который будет проверять принадлежит ли A заданному множеству (в моем случае IDENT1 и IDENT2) или нет, и если нет — генерировать ошибку.
Re: Как сделать чтобы #ifdef принимал ограннич. кол-во идент
Здравствуйте, Иван Романюк, Вы писали:
ИР>Речь вот о чем: у меня в программе есть участки кода такого вида: ИР>#ifdef IDENT1 ИР>.... ИР>#endif ИР>#ifdef IDENT2 ИР>... ИР>#endif
ИР>Таких участков сравнительно много, проблема в том, что если я где-то ошибусь и напишу вместо, скажем, IDENT2 IEDNT2 — то не скомпилируется кусок кода, но сразу это может быть незаметно — просто какая-то функция в программе не будет работать. Вопрос: можно ли определить такой макрос, скажем, #SafeIfDef (A), который будет проверять принадлежит ли A заданному множеству (в моем случае IDENT1 и IDENT2) или нет, и если нет — генерировать ошибку.
Можно, например, вот так:
#ifdef IDENT1
#define PLATFORM_DEPENDENT(a, b) a
#endif
#ifdef IDENT2
#define PLATFORM_DEPENDENT(a, b) b
#endif
if (some_func() == PLATFORM_DEPENDENT(14, 47))
...
Здравствуйте, Иван Романюк, Вы писали:
ИР>Речь вот о чем: у меня в программе есть участки кода такого вида: ИР>#ifdef IDENT1 ИР>.... ИР>#endif ИР>#ifdef IDENT2 ИР>... ИР>#endif
ИР>Таких участков сравнительно много, проблема в том, что если я где-то ошибусь и напишу вместо, скажем, IDENT2 IEDNT2 — то не скомпилируется кусок кода, но сразу это может быть незаметно — просто какая-то функция в программе не будет работать. Вопрос: можно ли определить такой макрос, скажем, #SafeIfDef (A), который будет проверять принадлежит ли A заданному множеству (в моем случае IDENT1 и IDENT2) или нет, и если нет — генерировать ошибку.
Можно вынесни #ifdef x и #endif в отдельный инклуд:
//CodeScripts/@IfDefIDENT1.hpp
//no #pragma once and ifdef guards#ifdef IDENT1
//CodeScripts/@IfDefIDENT2.hpp
//no #pragma once and ifdef guards#ifdef IDENT2
//CodeScripts/@EndIf.hpp
//no #pragma once and ifdef guards#endif//Main.cpp#include"CodeScripts/@IfDefIDENT1.hpp"//long blablabla#include"CodeScripts/@EndIf.hpp"#include"CodeScripts/@IfDefIDENT2.hpp"//long blablabla again :)#include"CodeScripts/@EndIf.hpp"
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: Как сделать чтобы #ifdef принимал ограннич. кол-во идент
Здравствуйте, Vain, Вы писали:
ИР>>Речь вот о чем: у меня в программе есть участки кода такого вида: ИР>>#ifdef IDENT1 ИР>>.... ИР>>#endif ИР>>#ifdef IDENT2 ИР>>... ИР>>#endif
ИР>>Таких участков сравнительно много, проблема в том, что если я где-то ошибусь и напишу вместо, скажем, IDENT2 IEDNT2 — то не скомпилируется кусок кода, но сразу это может быть незаметно — просто какая-то функция в программе не будет работать. Вопрос: можно ли определить такой макрос, скажем, #SafeIfDef (A), который будет проверять принадлежит ли A заданному множеству (в моем случае IDENT1 и IDENT2) или нет, и если нет — генерировать ошибку.
Вот это работает под msvc: