Sla (10.11.2004 12:05, просмотров: 866)
Окаянный ?: Есть программка (все предельно упрощено):
//-----------------------
#include
#define Is_in_english 1
#define MENU_ITEM( name, str1 )\
const char __flash name[] = { str1 };
//MENU_ITEM( test_test, "Cycle" );
MENU_ITEM( test_test, ( Is_in_english ? "Cycle" : "Цикл" ) )
void main( void )
{
printf( "\n%s\n", test_test );
}
//-----------------------
Не компилируется. Строку
MENU_ITEM( test_test, ( Is_in_english ? "Cycle" : "Цикл" ) )
комментируем, раскомментируем
//MENU_ITEM( test_test, "Cycle" );
все собирается.
Что могут посоветовать благородные доны? Нужно подавать на вход макроса либо одну строку, либо другую в зависимости от объявленного либо в свойствах проекта, либо через #define идентификатора. Макрос объявляет char [] в памяти команд.
Решение заменить
const char __flash name[] = { str1 };
на
const char __flash *name = str1;
не устраивает, т.к. такое IAR 2.28 не собирает.