реклама на сайте
подробности

 
 
> Препроцессор, Странное вмешательство с текст
Dog Pawlowa
сообщение Jan 4 2011, 07:24
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



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);


Это МОЙ текст!


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
SSerge
сообщение Jan 4 2011, 10:14
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



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


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 4 2011, 13:17
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Ниасилил, но кой ляд здесь
Код
(long)stat.##name

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

?
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jan 4 2011, 15:17
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Можно даже
Код
(long)(stat . name)
только всё же непонятно — почему оно не хочет со склейкой?


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 5 2011, 04:34
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(SSerge @ Jan 4 2011, 16:14) *
А попробуйте старый дедовский метод склеивания строк - посредством вставки пустого комментария вместо ##.
Вот так: (long)stat./**/name

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

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

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

Да, нашел условия, при которых нет пробелов:
stat##.##name --> stat.wait_time


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Oldring
сообщение Jan 11 2011, 09:36
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874



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


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


--------------------
Пишите в личку.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th July 2025 - 06:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016