Что-то туплю сегодня.
Попрошу помощи у коллективного разума.
Как написать что-то подобное (ниже) на СИ. Желательно на GCC подобном.
// определяем но не задаем значение#define OPT_M1
// некий макрос для проверки возвращает 0 или 1#define fun_check_opt(opt) \
вот тут надо что-то написать... :)
// чтобы вот так использовать:void func(void)
{
//...if ( !fun_check_opt(OPT_M1) )
return 0;
//...
}
Надо именно _макро_ некое написать, а не переписать код func.
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Что-то туплю сегодня. AWW>Попрошу помощи у коллективного разума.
AWW>Как написать что-то подобное (ниже) на СИ. Желательно на GCC подобном.
AWW>
AWW>// определяем но не задаем значение
AWW>#define OPT_M1
AWW>// некий макрос для проверки возвращает 0 или 1
AWW>#define fun_check_opt(opt) \
AWW>вот тут надо что-то написать... :)
AWW>// чтобы вот так использовать:
AWW>void func(void)
AWW>{
AWW>//...
AWW> if ( !fun_check_opt(OPT_M1) )
AWW> return 0;
AWW>//...
AWW>}
AWW>
AWW>Надо именно _макро_ некое написать, а не переписать код func.
А что мешает этот return обернуть в #if(n)def/#endif? В сухом остатке ровно то же самое получится.
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>// некий макрос для проверки возвращает 0 или 1 AWW>#define fun_check_opt(opt) \ AWW>вот тут надо что-то написать... :)
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Что-то туплю сегодня. AWW>Попрошу помощи у коллективного разума.
AWW>Как написать что-то подобное (ниже) на СИ. Желательно на GCC подобном.
AWW>Надо именно _макро_ некое написать, а не переписать код func.
Здравствуйте, Constructor, Вы писали:
C>Если надо именно макро, то можно как-то так:
C>
...
C>
Дело в том что таких опций скажем так 300 штук. И они еще к тому же разбросаны по конфигурационным хидерным "под-проектов" то есть цепляется главный op.h файл и потом из него пробегается по десятку "под-проектов".
И городить вместо простого и понятного
#define OP_1
для каждой опции (в моем случае)
#ifdef OP_1
#define _CONFIG_OP1 1
#else
#define _CONFIG_OP1 0
#endif
Этого и так много. Именно хотелось сделать так чтобы не создавать несколько точек правки.
Здравствуйте, Andrew.W Worobow, Вы писали:
AWW>Этого и так много. Именно хотелось сделать так чтобы не создавать несколько точек правки.
А есть гарантия, что макрос всегда определяют в пустую строку?
Если таки есть, то попробуй так:
#define TEST_MACRO( Z ) TEST_MACRO_1( *Z )
#define TEST_MACRO_1( Z ) (!1[#Z])
Я в стандарте не силён, так что может понадобиться ещё один уровень подстановки
#define TEST_MACRO( Z ) TEST_MACRO_1( *Z )
#define TEST_MACRO_1( Z ) TEST_MACRO_2( Z )
#define TEST_MACRO_2( Z ) (!1[#Z])
но мне кажется, что хватит и одного...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском