串行流和定义的变量

时间:2013-12-17 17:07:08

标签: c++ printf

希望来自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已发送至系统。”

我正在寻找第一个,不确定是否可能......谢谢!

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

不,#define宏所做的是没有语义解析的纯粹替换。

如果将LOCK_OUT定义为0xA00A,编译器将首先用LOCK_OUT替换0xA00A,然后将其解释为整数值。