【问题标题】:Frama-C multiline macro definition syntax errorFrama-C 多行宏定义语法错误
【发布时间】:2018-06-20 22:27:17
【问题描述】:

我是 Frama-C 的新手,我正在尝试正式验证包含大量多行宏定义的代码库,如下所示:

#define vector_setElement(w,x,i)                  \
  _Generic                                        \
  (                                               \
    (x),                                          \
    const int8_t    : vector_setElement_INT8   ,  \
          int8_t    : vector_setElement_INT8   ,  \
    const uint8_t   : vector_setElement_UINT8  ,  \
          uint8_t   : vector_setElement_UINT8  ,  \
    const int16_t   : vector_setElement_INT16  ,  \
          int16_t   : vector_setElement_INT16  ,  \
    const uint16_t  : vector_setElement_UINT16 ,  \
          uint16_t  : vector_setElement_UINT16 ,  \
    const int32_t   : vector_setElement_INT32  ,  \
          int32_t   : vector_setElement_INT32  ,  \
    const uint32_t  : vector_setElement_UINT32 ,  \
          uint32_t  : vector_setElement_UINT32 ,  \
    const int64_t   : vector_setElement_INT64  ,  \
          int64_t   : vector_setElement_INT64  ,  \
    const uint64_t  : vector_setElement_UINT64 ,  \
          uint64_t  : vector_setElement_UINT64 ,  \
  )                                               \
  (w, x, i)

但是,当我在使用此宏定义时运行 Frama-C 时,在使用宏定义的位置出现解析器语法错误。我尝试了许多不同的多行宏定义,但解析器语法错误总是出现在使用宏定义的位置。

所以,我的问题是:

Frama-C 是否支持多行宏定义?如果是这样,我需要做什么来修复解析器错误?

另外,我知道 Frama-C 支持一些 C11 结构,包括 _Generic 吗?

*** 更新 - 解决方案 ***

事实证明,_Generic 是多行宏定义出现语法错误的原因。我认为不使用 _Generic 的多行宏定义,实际上在其他一些函数和宏调用下使用它。没有 _Generic 解析的多行宏定义完全没问题。

【问题讨论】:

    标签: frama-c


    【解决方案1】:

    Frama-C 依赖外部预处理器(默认由相应的autoconf 宏在编译时给出)来执行宏扩展,因此多行宏应该不是问题(如果是的话,这个将是您的预处理器的问题,而不是 Frama-C)。另一方面,_Generic 确实不在 Frama-C 目前支持的 C11 功能中。

    【讨论】:

      【解决方案2】:

      Frama-C 是 C,所以它确实支持它,但不确定 _Generics,这可能是转义在这种情况下不起作用的原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多