重新定义 short long 以便在嵌入式 c 代码上使用代码分析工具
Redefine short long to use code analysis tools on embedded c code
我正在尝试使用 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
错误。
是使用 #define short
这将有效地从类型声明中删除 short
使其成为 long
.
副作用是变量声明 short
将没有类型或存储 class,因此,将默认为 int
.
在 clang
或 gcc
等编译器中,类型 int long
将默认为 long
有效地使两种解决方案成为可能,同时注意不同的副作用。
我正在尝试使用 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
错误。
#define short
这将有效地从类型声明中删除 short
使其成为 long
.
副作用是变量声明 short
将没有类型或存储 class,因此,将默认为 int
.
在 clang
或 gcc
等编译器中,类型 int long
将默认为 long
有效地使两种解决方案成为可能,同时注意不同的副作用。