0

我最近遇到了这个片段:

extern const uint8_t server_root_cert_pem_start[] asm("_binary_server_root_cert_pem_start");
//                                                ^^^^^^^^^^^^^ what's going on here?

esp-idf 示例中(第 74 行)。我看不懂声明,我的网上搜索也没有成功。我最好的猜测是这段代码:

  • 用作uint8_t替代品,char因为它们具有相同的大小(1 个字节)。不知道为什么

  • 最终通过在我们的模块之外指定长度的字符串长度推断数组大小来声明一个字符串(const char数组)

即使我的假设是正确的,我也无法理解为什么要这样写,或者在这种情况下“空终止”会发生什么。所以实际的问题:

  • 这段代码在做什么?
  • 为什么这样做(优点)?
  • 是否有任何含义可以将其与简单的 C 风格声明区分开来?
4

1 回答 1

1

这是编译器依赖。但是我的猜测是,这段代码声明了一个名为 server_root_cert_pem_start 的数组,并将其绑定到另一个符号(内存位置)_binary_server_root_cert_pem_start 可能在其他地方定义(在汇编文件中?)

于 2019-11-13T09:52:06.463 回答