Я пишу код в среде Arduino (1.6.5). В моем коде я хочу иметь возможность определить строковое значение, а затем использовать его, а также Serial.println() на последовательной консоли.Arduino: Как распечатать значение определенных констант?
Например:
#define THEVAL 12345 // Define the value
...
v = v + THEVAL; // Use the value in code.
...
Serial.println("The value is: #THEVAL"); // Show the value to user (for debugging)
Однако компилятор не заменяет константы внутри строк в кавычках. Я также попытался this (C++ stringification), который указывает, что вы размещаете постоянный вне цитируемый строку
#define THEVAL 12345
...
Serial.println("This is the value: " #THEVAL);
но которая дает ошибку «Бродячая # символ» в компиляторе.
Буду признателен за понимание! Благодаря!
РЕДАКТИРОВАТЬ: Странное поведение
На тестировании я обнаружил следующее: (Примечание: IP-адрес использует запятые для разделения октетов, потому что каждый октет передается в виде отдельного параметра к EthernetServer.begin в массив байтов (байт ф [] = {а, б, в, г})
#define IP_ADDRESS 192,168,1,1
#define IP_ADDRESS_STRING(a,b,c,d) xstr(a)"."xstr(b)"."xstr(c)"."xstr(d)
#define xstr(a) str(a)
#define str(a) #a
Если я сделать следующее, я получаю ошибку "IP_ADDRESS_STRING требует 4 аргументов, но только один дал"
debug("IP Address is: " IP_ADDRESS_STRING(IP_ADDRESS));
, но если я делаю следующее, я получаю ошибку «„ул“макросъемки прошло 4 аргумента, но только берет 1»
debug("IP ADDRESS: " xstr(IP_ADDRESS));
Но если я это сделаю, это работает:
String ipAddressString(int a, int b, int c, int d)
{
return String(a) + "." + String(b) + "." + String(c) + "." + String(d);
}
debug("IP Address is: " + ipAddressString(IP_ADDRESS));
Я смущен - почему один макрос считает, что IP_ADDRESS является единственным аргументом, а другой макрос рассматривает его как 4 аргумента, а функция работает правильно: он видит 4 аргумента?
Я нашел это: http://stackoverflow.com/questions/2653214/stringification-of-a -macro-value, но он не работает, если константа имеет запятую. Например: #define THEVAL 1,2,3 –
[this] (https://gcc.gnu.org/onlinedocs/cpp/Stringification.html) может помочь. –
Привет, Евгений, это была та же ссылка, которую я уже опубликовал в своем оригинальном комментарии ... –