Перейти к содержанию
    

Задачка усложнилась :о) #define var to str

Вечер добрый.

Запутался в дефайнах.

Дефайном определено число 48 как dWorkLine .

Далее, другим дефайном хочу состряпать строку, в которую входит число 48 в виде текста.

Должно получиться так: "\e[48;1H" с возможностью менять 48 на любые другие числа.

Вызов должен быть без передачи переменных или констант в таком виде sComandLine().

#define dWorkLine  48
#define svComandLine(vROW_Z) Serial2.print("\e["#vROW_Z";1H");

В таком виде не работает:

#define sComandLine() svComandLine(dWorkLine)

 

Так работает:

#define sComandLine() svComandLine(48)

 

В общем, как заставить работать первый вариант?

 

вопрос снят

 

https://stackoverflow.com/questions/1264898...ber-to-a-string

 

В рабочем варианте заменил

#define dWorkLine  48

на

#define dWorkLine  48+6

И опять всё накрылось...

Изменено пользователем Trashy_2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#define STR(s) #s

#define ANSI_STR(s) STR(s) // только через двойной макрос можно #define QQQ 222 превратить в "222". Пример sprintf( ANSI_STR(QQQ) "=%d", ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В рабочем варианте заменил

#define dWorkLine  48

на

#define dWorkLine  48+6

И опять всё накрылось...

Препроцессор не умеет сумму превращать в строку, так что умерьте хотелки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Препроцессор не умеет сумму превращать в строку, так что умерьте хотелки.

Я опечален.

А как состряпать нужные "стринги" на этапе компиляции?

Я хреновый программист, поэтому от чистого сердца спрашиваю. sprintf вроде как время контроллера жрёт и память...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как состряпать нужные "стринги" на этапе компиляции?

Внешней утилитой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Препроцессор не умеет сумму превращать в строку, так что умерьте хотелки.

зато умеет компилятор

https://stackoverflow.com/questions/6713420...824971#26824971

но правда таким образом, что лучше бы не умел.

 

А как состряпать нужные "стринги" на этапе компиляции?

самому поработать препроцессором.

скриптом на любом понравившимся скриптовом языке, который будет автоматически генерить .h файл

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Препроцессор не умеет сумму превращать в строку, так что умерьте хотелки.

Я давно-давно (ещё до ARM-ов) начал использовать такой способ.

Размещаю основную структуру константных данных (элементы инициализации, диапазоны изменения, строковые описатели) в ассемблерном файле.

Мне тоже понадобилось делать подсчёт разных элементов внутри структуры.

Так вот, в ассемблере это достаточно легко, примерно так:

PAR_COUNT	SET		0							; Номер параметра
...
PAR_COUNT	SET		PAR_COUNT + 1					; Следующий параметр 
...
PAR_COUNT	SET		PAR_COUNT + 1					; Следующий параметр 
...

В любой момент значением этого счётчика можно с помощью компилятора инициализировать константу, а потом использовать где угодно.

device:
DC8		A_LEN, 32
DC16	PAR_COUNT

Изменено пользователем amiller

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я давно-давно (ещё до ARM-ов) начал использовать такой способ.

В сях для этого и не только можно использовать метод X Macro.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...