【问题标题】:Possible to modify a const with internal linkage... externally?可以用内部链接修改 const ......在外部?
【发布时间】:2020-10-05 05:13:50
【问题描述】:

我正在做一个项目,该项目使用带有我希望保持不变的源代码的库。在库的一个源代码文件中是一个全局 const c 风格的字符串数组,我想从项目中的另一个文件外部更改它:

const u8 STRING_PRODUCT[] PROGMEM = USB_PRODUCT;

默认情况下,全局常量具有内部链接。有没有可能在不触及此文件中的代码的情况下更改此数组?或者我至少可以以某种方式获取这个数组的内存地址,然后使用指针来改变它?谢谢!

【问题讨论】:

  • 不,那不可能。
  • 您需要解决的实际和潜在问题是什么?为什么你认为这个问题可以通过修改常量数据来解决?
  • 另外,PROGMEM 用法表示嵌入式系统,其中数据可以放置在只读存储器中。这意味着在这种情况下,即使使用诡计也行不通。
  • 好的,所以我这里指的库是Arduino核心库,特别是USB源代码。如果您制作 USB arduino 游戏控制器、键盘或 midi 控制器,则您使用的任何板的名称都会在您插入时成为计算机 USB 设备列表上的名称。唯一修改方法名字是通过实际修改源代码文件,但这意味着任何使用我的项目的人也必须修改自己的Arduino核心库,这对于技术水平较低的人来说会很困难。
  • USB_PRODUCT 是如何定义的?

标签: c++ constants linkage internals


【解决方案1】:

无需修改源代码。 USB_PRODUCT 仅在尚未定义的情况下才在 USBCore.cpp 中定义,因此只需在编译库时将其定义为您想要的任何内容。 (Reference)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多