Я хочу добавить в свой код условную директиву для управления разными сборками, например:
#if VERSION > 100
/* Compiling here */
#endif
Проблема в том, что «ВЕРСИЯ» находится в другом коде, который я не могу изменить. Он был определен как строка:
#define VERSION "101"
Мне интересно, есть ли какой-то макрос или директива, которая преобразует строку в число, поэтому я могу просто сделать
#if STRING_TO_NUMBER(VERSION) > 100
/* Compiling here */
#endif
Пожалуйста, это возможно?
PS. Кажется, мое описание не совсем понятно. Основная цель этого требования — контролировать ветку версии. Например, в старой версии, до версии 100, эта программа хотела бы использовать old_function(). После этой версии все функции были перенесены в new_function. Поэтому мне нужно написать такие коды:
#if VERSION >= 100
old_function();
#else
new_function();
#endif
#if VERSION >= 100
int old_function()
{
...
}
#else
int new_function()
{
...
}
#endif
Вы можете видеть, что будет скомпилирована только одна из функций. Следовательно, условие должно быть определено на этапе предварительной обработки, а не во время выполнения.
Сложность в том, что ВЕРСИЯ была определена как строка, которая вызвала этот вопрос.
inline
илиmacro
? - person Thomas Matthews   schedule 20.11.2013#
'stringize'), но, насколько я знаю, пойти другим путем непросто. - person Michael Burr   schedule 20.11.2013#include
, вам будет трудно (см. мое решение), но если вам просто нужно условно вызвать ту или иную функцию, вы можете использовать решение rici, которое немного более удобно в обслуживании - person Glenn Teitelbaum   schedule 20.11.2013