gpt4 book ai didi

c - Arduino:如何打印出定义常量的值?

转载 作者:太空宇宙 更新时间:2023-11-04 02:38:55 25 4
gpt4 key购买 nike

我正在 Arduino (1.6.5) 环境中编写代码。在我的代码中,我希望能够定义一个字符串值,然后将它和 Serial.println() 一起使用到串行控制台。

例如:

#define THEVAL 12345      // Define the value
...
v = v + THEVAL; // Use the value in code.
...
Serial.println("The value is: #THEVAL"); // Show the value to user (for debugging)

但是,编译器不会替换带引号的字符串中的常量。我也试过this (C++ 字符串化)表示您将常量放在 引号字符串

之外
#define THEVAL 12345
...
Serial.println("This is the value: " #THEVAL);

但这会在编译器中产生“Stray # character”错误。

如有任何见解,我将不胜感激!谢谢!

编辑:奇怪的行为

在测试中我发现了以下内容:(注意:IP 地址使用逗号分隔八位字节,因为每个八位字节都作为单独的参数传递给 EthernetServer.begin 以字节数组形式 (byte ip[] = { a, b, c, d })

#define IP_ADDRESS 192,168,1,1
#define IP_ADDRESS_STRING(a,b,c,d) xstr(a)"."xstr(b)"."xstr(c)"."xstr(d)
#define xstr(a) str(a)
#define str(a) #a

如果我执行以下操作,我会收到错误消息“IP_ADDRESS_STRING 需要 4 个参数,但只给定了一个”

debug("IP Address is: " IP_ADDRESS_STRING(IP_ADDRESS));

但是如果我执行以下操作,我会收到错误消息“宏‘str’传递了 4 个参数,但只需要 1 个”

debug("IP ADDRESS: " xstr(IP_ADDRESS));

但如果我这样做,它会起作用:

String ipAddressString(int a, int b, int c, int d)
{
return String(a) + "." + String(b) + "." + String(c) + "." + String(d);
}

debug("IP Address is: " + ipAddressString(IP_ADDRESS));

我很困惑 - 为什么一个宏将 IP_ADDRESS 视为单个参数,而另一个宏将其视为 4 个参数,而函数正常工作:它看到 4 个参数?

最佳答案

#define XSTR(s) STR(s)
#define STR(s) #s
....
#define THEVAL 12345
....
Serial.println("The value of " STR(THEVAL) " is " XSTR(THEVAL));

这将输出:

The value of THEVAL is 12345

关于c - Arduino:如何打印出定义常量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34024437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com