问题描述
我正在尝试使用SourceTrails(https://www.sourcetrail.com/)从MPLAB CX8编译器分析嵌入式c。 它并非完全没有问题,因为编译器使用了C标准中未提供的许多自定义功能。
其中之一是使用short long
来指示全局包含中的24位变量,例如:
extern volatile unsigned short long TBLPTR;
SourceTrail(使用clang)显示此错误: 不能与以前的“短”声明说明符组合。
仅出于分析目的,我想在全局包含顶部指定以下内容:
#define "short long" long
但是很明显,这失败了!
我可能必须执行搜索和替换,但是如果有一个更简单的方法,那会很棒吗?
解决方法
您可以使用类似的内容:
#define short int
short long
变量现在将是long
,至少在诸如gcc
和clang
之类的主流编译器中。
任何short
变量现在都将是int
,其副作用是short int
声明现在将导致invalid combination
错误。
The solution found by the OP使用的是#define short
,它将有效地从类型声明中short
移除long
。
副作用是声明为short
的变量将没有类型或存储类,因此将默认为int
。
在clang
或gcc
之类的编译器中,类型int long
将默认为long
,有效地使两种解决方案成为可能,并注意不同的副作用。