Надеюсь, легкий вопрос от 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 Отправлено в систему".
Я ищу, чтобы сделать первое, не уверен, возможно ли это... Спасибо!
Поскольку макросы являются подстановками, вам нужно будет сделать что-то вроде этого:
#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;
}
Нет, какой макрос #define
является чистой заменой без семантического разбора.
Если вы определяете LOCK_OUT
как 0xA00A
, компилятор LOCK_OUT
заменит LOCK_OUT
на 0xA00A
, а затем 0xA00A
его как целочисленное значение.
arr = { LOCK_OUT }
, как компилятор может получитьLOCK_OUT
когда значение подставляется в0xA00A
?