【发布时间】: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