C代码格式化

时间:2013-06-06 14:50:05

标签: c ansi code-formatting misra

我正在寻找扩展或更正代码文件的工具。

根据我们的编码指南,整数值必须是显式签名的:

// bad looking code:
uint8 i = 1;
// corrected code:
uint8 j = 1u;

我已经使用了几个代码格式化工具,但我没有找到任何进行此类修正的工具。 (例如GreatCode可以将void关键字放入空方法参数中,这几乎与重构相同) 我监督过什么吗? C是否可以使用可扩展的核心格式?

2 个答案:

答案 0 :(得分:0)

我对ANSWER这个犹豫不决,而不是作为评论提供,因为我可能是错的......但我怀疑没有通用的工具。

问题是该工具必须具有足够的智能才能解释变量(或常量)的符号,以便能够确定是否添加U.

对于使用在C99中添加的stdint.h定义(POSIX)typedef的声明来说,这很简单:

uint8_t i = 1;    // Known to be unsigned char... can add U

但是你的例子通过使用自定义定义来证明这一点!

让我们举个例子:

uint8 i = 1;

这是什么签名?所以你的工具必须解析源文件和任何头文件才能找到typdef(或#define)。

但初始化值如何......处理“幻数”很简单:

uint8_t i = 1;     // Known to be unsigned char...
uint8_t i = 1u;    // ... so can add the u to the 1

但#defined初始化器呢?

#define INIT 1
uint8_t i = INIT;  // Known to be unsigned char...
uint8_t i = INITu; // ... adding u here is syntactically correct but perverse!

你可以“盲目地”在#define中添加一个U而不知道所有用途吗?

虽然有可能,我不知道有任何工具可以做到这一点 - 我建议犯错误的可能性很高!

答案 1 :(得分:0)

虽然没有回答实际问题,而且由于“政治”原因可能无法回答,但我建议您更改编码指南,以便启用有关符号转换和范围转换的警告。对于 gcc ,这是

-Wsign-conversion -Wconversion

和其他编译器也可能有这些警告。并且最终结果可能是比您当前的指南更强大的代码(这听起来他们对匈牙利符号也很满意......)。