带内联程序集的C数组声明

带内联程序集的C数组声明,c,gcc,inline-assembly,esp-idf,C,Gcc,Inline Assembly,Esp Idf,我最近发现了这样一个片段: extern const uint8_t server_root_cert_pem_start[] asm("_binary_server_root_cert_pem_start"); // ^^^^^^^^^^^^^ what's going on here? 在(第74行)中。我无法理解声明,我的在线搜索也没有成功。我最好的猜测是以下代码: 使用uint8\u t替换

我最近发现了这样一个片段:

extern const uint8_t server_root_cert_pem_start[] asm("_binary_server_root_cert_pem_start");
//                                                ^^^^^^^^^^^^^ what's going on here?
在(第74行)中。我无法理解声明,我的在线搜索也没有成功。我最好的猜测是以下代码:

  • 使用
    uint8\u t
    替换
    char
    ,因为它们的大小相同(1字节)。不知道为什么

  • 通过从模块外部指定长度的字符串长度推断数组大小,最终声明一个字符串(a
    const char
    array)

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

  • 这段代码在做什么
  • 为什么这样做(优势)
  • 它与简单的C风格声明有什么区别吗
      这取决于编译器。然而,我的猜测是,这段代码声明了一个名为server\u root\u cert\u pem\u start的数组,并将其绑定到另一个符号(内存位置)\u binary\u server\u root\u cert\u pem\u start可能是在其他地方定义的(在汇编文件中?)

      是的,这是GNU C语法,用于设置变量的asm符号名,例如硬编码前导的