这个显然是非标准的结构打包语法输入到GCC中是什么?

这个显然是非标准的结构打包语法输入到GCC中是什么?,gcc,struct,syntax,packing,Gcc,Struct,Syntax,Packing,我被一些与我正在使用的第三方代码库相关联的代码吓了一跳。所有代码都是用C或汇编语言编写的,除了一些遵循下面描述的语法的文件。我找不到任何关于这种语法的文档,但GCC完全接受了它。和我一起工作的是GCC 8。syntac必须是GCC的某种扩展。如果有人能告诉我它到底是什么扩展以及它在哪里被记录,那将是非常好的 代码显然定义了带打包的结构类型,并使用如下语法: 注释行以“-”开头 关键词有“块”、“填充”、“字段”和“字段高”,可能更多。一段典型的代码如下所示: 块{ 字段1 字段1 填充物8

我被一些与我正在使用的第三方代码库相关联的代码吓了一跳。所有代码都是用C或汇编语言编写的,除了一些遵循下面描述的语法的文件。我找不到任何关于这种语法的文档,但GCC完全接受了它。和我一起工作的是GCC 8。syntac必须是GCC的某种扩展。如果有人能告诉我它到底是什么扩展以及它在哪里被记录,那将是非常好的

代码显然定义了带打包的结构类型,并使用如下语法:

  • 注释行以“-”开头
  • 关键词有“块”、“填充”、“字段”和“字段高”,可能更多。一段典型的代码如下所示:
块{
字段1
字段1
填充物8
外地大学高6
}
块可以包含任意数量的字段和填充。给定的数字在目标体系结构上总是加起来等于一个字长


包含此类代码的文件的扩展名通常为“.bf”,而“.c”也可能出现。一些文件有#include引用普通C头,而一些普通C文件有#include引用.bf文件。

快速浏览Git存储库中的
工具
目录,我发现了我,它声称是“位域结构”的代码生成器。我想这就是
.bf
的意思


中有一些用于构建位场目标的CMake函数。这对于比我更熟悉CMake的人来说可能是有意义的。

快速浏览一下Git存储库中的
工具
目录,我发现了它,它声称是“位域结构”的代码生成器。我想这就是
.bf
的意思


中有一些用于构建位场目标的CMake函数。对于比我更熟悉CMake的人来说,这可能是有意义的。

位场生成器在这里记录。

位场生成器在这里记录。

感谢编辑材料:)。我无法复制(将其编译)。你能提供一份申请表吗?包括编译器调用命令。好的,很好。我会试试的,可能需要一点时间。实际上这是一个开源代码库。这是一个名为seL4的微内核操作系统-主页位于seL4.systems。源树可以通过repoinit-u和reposync获得。其中一个文件出现在kernel/libsel4/mode_include/64/sel4/shared_types.bf。我已经在seL4-Devel邮件列表中发布了相同的问题。首先回答的人将得到最大的感谢:)@cocoban,查看该线程中的最后一条消息,我看到了您的调用命令,这似乎是在问这样一个问题:gcc只是用作C预处理器(注意
-E
-和
-P
开关)。感谢编辑垫:)。我无法复制(让它编译). 你能提供一份申请表吗?包括编译器调用命令。好的,很好。我会试试的,可能需要一点时间。实际上这是一个开源代码库。这是一个名为seL4的微内核操作系统-主页位于seL4.systems。源树可以通过repoinit-u和reposync获得。其中一个文件出现在kernel/libsel4/mode_include/64/sel4/shared_types.bf。我已经在seL4-Devel邮件列表中发布了相同的问题。无论谁先回答,都会得到最大的感谢:)@cocoban,看看该线程中的最后一条消息,我看到了您的调用命令,这似乎是在问一个问题:gcc只是用作C预处理器(注意
-E
-和
-P
开关)。
block <BLOCK_NAME> {
    field <FIELD_NAME_NO_1> 1
    field <FIELD_NAME_NO_2> 1
    padding 8
    field_high <FIELD_NAME_NO_3> 6
}