Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Препроцессор
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Dog Pawlowa
IAR Renesas R8C/M16

Вывод переменной из списка

Код
#define STATISTIC_VAR(type, name, engl, defa) sprintf(my_buf,"\r%s=%ld",    \
                    (char*)stat_name[stat##name],            \
                    (long)stat.##name    );    pcSSS(my_buf);


Код
STATISTIC_VAR    (    long,    device_on_time            ,    "ON time"          ,    0    )



добавляется пробел между именем stat и точкой

Код
sprintf(my_buf,"\r%s=%ld", (char*)stat_name[statdevice_on_time], (long)stat .device_on_time ); pcSSS(my_buf);


Это МОЙ текст!
SSerge
Однако, нехорошо он поступает.
А попробуйте старый дедовский метод склеивания строк - посредством вставки пустого комментария вместо ##.
Вот так: (long)stat./**/name
может хоть так сработает.
Или между stat и точкой попробовать вставить одну из этих конструкций.
_Pasha
Ниасилил, но кой ляд здесь
Код
(long)stat.##name

нужна склейка? Может, просто
Код
(long)stat.name

?
ReAl
Можно даже
Код
(long)(stat . name)
только всё же непонятно — почему оно не хочет со склейкой?
Dog Pawlowa
Цитата(SSerge @ Jan 4 2011, 16:14) *
А попробуйте старый дедовский метод склеивания строк - посредством вставки пустого комментария вместо ##.
Вот так: (long)stat./**/name

Попробовал - два пробела - до точки и после точки.

Цитата(_Pasha @ Jan 4 2011, 19:17) *
нужна склейка?

Склейка не нужна, точка все равно разделитель.
Без склейки добавляется пробел после точки, к которому нет претензий.
Но есть склейка, или нет склейки - вставляется пробел ПЕРЕД точкой, то есть препроцессор влазит в мой текст.
Это место то ладно, но я широко использую препроцессор и начинаю бояться огрести неприятностей.

Да, нашел условия, при которых нет пробелов:
stat##.##name --> stat.wait_time
Oldring
Цитата(Dog Pawlowa @ Jan 5 2011, 10:34) *
Без склейки добавляется пробел после точки, к которому нет претензий.
Но есть склейка, или нет склейки - вставляется пробел ПЕРЕД точкой, то есть препроцессор влазит в мой текст.


Вы неправильно понимаете работу препроцессора.
На уровне текста препроцессор работал только в K&R C. Уже в ANSI C препроцессор работал на уровне потока лексем. В этом потоке нет некаких пробелов между отдельными лексемами. Вы же смотрите на результат искусственного обратного преобразования потока лексем в текст, используемый только для отладки, так сказать, посмотреть программиcту на то, "что после препроцессора". Видимо, генератор этого текста вставляет пробел между любыми двумя лексемами. Пробелы в этом тексте ни на что абсолютно не влияют. А вот то, что "после склейки" пробелы отсутствуют - мне кажется подозрительным. Мне сложно представить, что за лексему порождает такая склейка, но есть риск, что какую-то неправильную.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.