重新定义short-long以使用代码分析工具对嵌入式c代码进行分析



我正在尝试使用SourceTrails(https://www.sourcetrail.com/)以分析来自MPLAB CX8编译器的嵌入式c。它并非完全没有问题,因为编译器使用了许多C标准中没有的自定义功能。

其中之一是使用short long来指示全局包含中的24位变量,例如:

extern volatile unsigned short long     TBLPTR;

SourceTrail(使用clang(显示了这个错误:不能与以前的";短";声明说明符

仅用于分析,我想在全局include的顶部指定一些类似的内容:

#define "short long" long

但显然,这是失败的!

我可能需要执行搜索和替换,但如果有一个更简单的方法,那就太好了?

您可以使用以下内容

#define short int

short long变量现在将是long,至少在gccclang等主流编译器中是这样。

任何short变量现在都将是int,副作用是short int声明现在将导致invalid combination错误。


OP找到的解决方案是使用#define short,这将有效地从类型声明中删除short,使其成为long

副作用是声明为short的变量将没有类型或存储类,因此将默认为int

在像clanggcc这样的编译器中,类型int long将默认为long,有效地使这两种解决方案成为可能,同时考虑到不同的副作用。

最新更新