【问题标题】:CPP - Change #define in libraryCPP - 在库中更改#define
【发布时间】:2015-10-12 07:44:41
【问题描述】:

我正在修改 CPP Arduino 库。 目的是在用户代码中添加主机名。

这是 Arduino 以太网库: Arduino Ethernet Library

我在我的源代码中使用 ethernet.h。

在 ethernet.h 中有 include 语句。

#include "dhcp.h"

并且在 dhcp.h 中存在宏。

#define HOST_NAME "MYBOARD"

在 dhcp.cpp 中使用了这个宏

#include "dhcp.h" 
buffer[17] = strlen(HOST_NAME) ; // length of hostname + last 3 bytes of mac address
strcpy((char*)&(buffer[18]), HOST_NAME);

这个宏可以用变量替换,这样我就可以为 HOST_NAME 赋值是我的源代码吗?

例子。 在我的源代码中

 variable_name ="MYBOARD1"

应该将值传递给 dhcp.cpp 中的 HOST_NAME

我对 c++ 不太了解,需要示例代码方面的帮助。

谢谢

苏迪尔

【问题讨论】:

    标签: c++ arduino


    【解决方案1】:

    #define 是预处理器指令(“宏”),而不是变量。您无法在运行时对其进行修改。

    一种可能性是将#define HOST_NAME "MYBOARD" 替换为您想要的任何内容。如果由于某种原因无法执行此操作,请搜索使用 HOST_NAME 的位置并将其替换为您的自定义变量。如果没有其他详细信息,我无法为您提供更多帮助。

    【讨论】:

      【解决方案2】:

      您无法更改 HOST_NAME,因为它已在您的 dhcp.h 文件中定义,

      如果你想改变你必须将它声明为全局变量而不是#define

      有关#define 的更多信息:

      Why use #define instead of a variable

      【讨论】:

      • HOST_NAME 不是一个常数。它是一个#define,这意味着预处理器只要找到它就用"MYBOARD" 替换它。
      • 感谢 Vishal 提到“全局变量”我搜索了它,并且能够获得结果,我已经将它发布在上面.. 但我觉得这是一种肮脏的修复方式,帮帮我以正确的方式写作。
      【解决方案3】:

      我能够得到结果

      在 dhcp.h 中我替换了

      #define HOST_NAME "my-host-name"
      

      extern const char  HOST_NAME[10] ;
      

      然后在我使用的项目源代码中

      const char HOST_NAME[] = "MYHOSTONE";
      

      编译后我运行了代码,在 DHCP 服务器日志中观察到,它显示了正确的主机名。我认为这是肮脏的伎俩,我请求专家帮助我清理这条线。

      谢谢

      【讨论】:

      • extern const char HOST_NAME[] ; 不是也能正常工作(甚至更好,因为您在更改主机名时不需要更改它)?
      • frarugu87 ,我不认为..它有效..谢谢。下一个问题是在不需要主机名的项目中,如果此数组没有值.. 编译时显示错误,如果未初始化(未分配值)如何分配一些默认值
      • 我认为您不能将其留空。您可以将其转换为指针,写入extern const char *HOST_NAME;const char *HOST_NAME = "MYHOSTONE";,因此您可以将其初始化为NULL。或者你可以简单地将它分配给一个空字符串(即const char HOST_NAME[] = "";,即使这种方式浪费一个字节),或者你可以尝试(但我不确定它是否会工作)const char HOST_NAME[0];(在项目中源代码,不在.h文件中))。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多