如何输出#define值

How can I output #define value

本文关键字:#define 输出 何输出      更新时间:2023-10-16

我是这个论坛的新手,所以请对我宽容一点:)

我的代码中有以下内容

#define SYS_SBS     0x02 

每当我尝试使用它并尝试输出时,我都会得到2作为值,但我希望得到SYS_SBS作为程序的输出。有办法吗,我能做到。

我无法控制源代码。我只需要输出SYS_SBS。

附加详细信息:我无法更改某些头文件。但是,我可以更改.cpp文件中的主函数。我想要SYS_SBS作为输出。我正在使用卫星,对于我的接收器检测到的所有卫星,我必须输出它们是什么类型的卫星。在代码中,所有这些都是用这个十六进制数字定义的。我只想输出SYS_SBS,而不是2

#include <stdio.h>
#define SYS_SBS     0x02 
#define id(x) #x
int main(){
    printf("%s %dn", id(SYS_SBS), SYS_SBS);
    return 0;
}

C标准提供了一个字符串化运算符(在令牌前面添加一个#),允许您输出特定的令牌。

不可能的是从变量的值向后转换到此令牌名称,因为这在翻译过程中丢失了(正如其他人所提到的)。如果你需要这种转换,可以考虑一个显式的"value2str"函数,它返回给定值的字符串表示:

const char *myType2str(int value)
{
    switch (value)
    {
        case SYS_SBS:
            return "SYS_SBS";
        default:
            return "UNKNOWN VALUE";
    }
}

编辑:根据一些评论,字符串化是标准的一部分。改变了这一点。谢谢你的提示。我不知道。

0x02中的十六进制表示。一旦你编译了它,它就只是一个数字(2)。

如果你想把它打印成十六进制,那么。。。将其打印为十六进制(例如:使用格式化字符串"0x%.2x"

好吧,你可以简单地:

printf("SYS_SBS");

但我假设您有一个数字作为"输入"(如2),并且想要输出字符串SYS_SBS,这是不可能的。你能做的最好的事情就是创建一个查找表,例如:

const char* sys_strings[] = { "SYS_EX", "SYS_TEM", "SYS_SBS" };