Trashy_2 1 22 января, 2018 Опубликовано 22 января, 2018 (изменено) · Жалоба Вечер добрый. Запутался в дефайнах. Дефайном определено число 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 И опять всё накрылось... Изменено 22 января, 2018 пользователем Trashy_2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 22 января, 2018 Опубликовано 22 января, 2018 · Жалоба #define STR(s) #s #define ANSI_STR(s) STR(s) // только через двойной макрос можно #define QQQ 222 превратить в "222". Пример sprintf( ANSI_STR(QQQ) "=%d", ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 22 января, 2018 Опубликовано 22 января, 2018 · Жалоба В рабочем варианте заменил #define dWorkLine 48 на #define dWorkLine 48+6 И опять всё накрылось... Препроцессор не умеет сумму превращать в строку, так что умерьте хотелки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Trashy_2 1 22 января, 2018 Опубликовано 22 января, 2018 · Жалоба Препроцессор не умеет сумму превращать в строку, так что умерьте хотелки. Я опечален. А как состряпать нужные "стринги" на этапе компиляции? Я хреновый программист, поэтому от чистого сердца спрашиваю. sprintf вроде как время контроллера жрёт и память... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 22 января, 2018 Опубликовано 22 января, 2018 · Жалоба А как состряпать нужные "стринги" на этапе компиляции? Внешней утилитой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 53 22 января, 2018 Опубликовано 22 января, 2018 · Жалоба Препроцессор не умеет сумму превращать в строку, так что умерьте хотелки. зато умеет компилятор https://stackoverflow.com/questions/6713420...824971#26824971 но правда таким образом, что лучше бы не умел. А как состряпать нужные "стринги" на этапе компиляции? самому поработать препроцессором. скриптом на любом понравившимся скриптовом языке, который будет автоматически генерить .h файл Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 23 января, 2018 Опубликовано 23 января, 2018 (изменено) · Жалоба Препроцессор не умеет сумму превращать в строку, так что умерьте хотелки. Я давно-давно (ещё до 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 Изменено 23 января, 2018 пользователем amiller Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 23 января, 2018 Опубликовано 23 января, 2018 · Жалоба Я давно-давно (ещё до ARM-ов) начал использовать такой способ. В сях для этого и не только можно использовать метод X Macro. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться