如何输出#define值
How can I output #define value
我是这个论坛的新手,所以请对我宽容一点:)
我的代码中有以下内容
#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" };
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 集合上的输出迭代器:assign和increment迭代器
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 如何输出#define值
- Visual Studio 2010:使用define宏指定输出可执行文件
- 尽管gcc -E输出正确,但#define宏中的无参数函数会导致错误