Люди добрые, памажите! C и окаянный "? :"
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Sla 10 ноября 2004 г. 15:02

Есть программка (все предельно упрощено):

//-----------------------
#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 не собирает.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru