我正在尝试使用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
,至少在gcc
和clang
等主流编译器中是这样。
任何short
变量现在都将是int
,副作用是short int
声明现在将导致invalid combination
错误。
OP找到的解决方案是使用#define short
,这将有效地从类型声明中删除short
,使其成为long
。
副作用是声明为short
的变量将没有类型或存储类,因此将默认为int
。
在像clang
或gcc
这样的编译器中,类型int long
将默认为long
,有效地使这两种解决方案成为可能,同时考虑到不同的副作用。