我最近发现了这个片段:
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风格声明有什么区别吗
这取决于编译器。然而,我的猜测是,这段代码声明了一个名为server_root_cert_pem_start的数组,并将其绑定到可能在其他地方(在汇编文件中?(定义的另一个符号(内存位置(_binary_server_root_cert _pem_start