последовательный поток и определенные переменные

0

Надеюсь, легкий вопрос от newb...

Если у меня есть определенная переменная:

#define LOCK_OUT   0xA00A

и я использую его в последовательном потоке следующим образом:

iprintf("%s Sent to the system. \r\n", LOCK_OUT);

на моем последовательном терминале я увижу текстовое представление LOCK_OUT или числовое представление? Например:

"LOCK_OUT Отправлено в систему".

в частности, у меня есть цикл, который проверяет массив определенных макросов, и я хочу использовать выбранный макрос (однажды найденный) в выходном последовательном потоке. так что это будет цикл:

int UDPDATA;
for (int i = 0, i < UDP_Size; i++)
{
    if (MACRO_ARRAY[i] == UDPDATA iprintf("%s Sent to system \r\n", MACRO_ARRAY[i]); 
}

и я хочу, чтобы имя макроса отправлялось в последовательный поток, а не в значение, которое оно представляет. Надеюсь, я объясню это правильно... vs

"0xA00A Отправлено в систему".

Я ищу, чтобы сделать первое, не уверен, возможно ли это... Спасибо!

Теги:
printf

2 ответа

1

Поскольку макросы являются подстановками, вам нужно будет сделать что-то вроде этого:

#include <stdio.h>

#define STRINGIFY(x) #x
#define LOCK_OUT 0xA00A

int main() {
    // %#04x prints 4 hexadecimal places
    printf("%s %#04x Sent to the system. \r\n", STRINGIFY(LOCK_OUT), LOCK_OUT);
    return 0;
}
  • 0
    Спасибо! Возникает еще один вопрос - скажем, у меня определена целая куча макросов - и у меня также есть массив этих макросов. Моя программа ищет в массиве соответствующий макрос, а затем выводит его через последовательный порт таким же образом. Если я просто использую STRINGFY (array [i]) в своем заявлении iprintf, я получу «array [i]» в моем последовательном потоке, а не макрос, который я пытаюсь идентифицировать ... Я, вероятно, должен был спросить это вопрос первый ... дай редактировать мой пост ...
  • 0
    @ Джедай, я не думаю, что это возможно. Потому что, если вы статически определяете массив как arr = { LOCK_OUT } , как компилятор может получить LOCK_OUT когда значение подставляется в 0xA00A ?
0

Нет, какой макрос #define является чистой заменой без семантического разбора.

Если вы определяете LOCK_OUT как 0xA00A, компилятор LOCK_OUT заменит LOCK_OUT на 0xA00A, а затем 0xA00A его как целочисленное значение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню