网站开发 链接指向文件夹,wordpress 中文图片,app网站及其特色,动态页网站有很多从事汽车电子行业的软件工程师在使用Source Insight阅览Classic AUTOSAR协议栈源码的时候#xff0c;
发现函数名无法解析#xff0c;基本上都变成了FUNC。 先说原因#xff1a; AUTOSAR的协议栈为了实现多平台和编译器兼容#xff0c;大量使用宏定义来代替关键字。…有很多从事汽车电子行业的软件工程师在使用Source Insight阅览Classic AUTOSAR协议栈源码的时候
发现函数名无法解析基本上都变成了FUNC。 先说原因 AUTOSAR的协议栈为了实现多平台和编译器兼容大量使用宏定义来代替关键字。
函数指针返回值等等。这样可以实现代码对编译器的解耦和复用。 这种标准或者平台化设计的代码真的和目标就是一亩三分地开发的模式不一样。为了可扩展和复用解耦增加了很多设计。 解决方法
Source Insight在 C:\Users\你的用户名\Documents\Source Insight 4.0下面有一个C.tom。在里面可以自定义一些宏展开
让Source Insight解析在分析符号的时候进行替换。 注意目前发现好像不支持宏的嵌套使用也就是说不可避免的有一些嵌套使用的宏定义会解析错误。常见于指针的使用解析。
比如FUNC里传入参数是个用宏描述的常量指针就会被误识别。 宏定义的来源一般放在各种文件名带compiler的头文件下搜索“#define FUNC”这样的字符串差不多就可以搜索到。 例如
#define FUNC(rettype, memclass) rettype#define FUNC_P2CONST(rettype, ptrclass, memclass) const rettype *#define FUNC_P2VAR(rettype, ptrclass, memclass) rettype *#define P2VAR(ptrtype, memclass, ptrclass) ptrtype *#define P2CONST(ptrtype, memclass, ptrclass) const ptrtype *#define CONSTP2VAR(ptrtype, memclass, ptrclass) ptrtype * const#define CONSTP2CONST(ptrtype, memclass, ptrclass) const ptrtype * const#define P2FUNC(rettype, ptrclass, fctname) rettype (* fctname)#define CONSTP2FUNC(rettype, ptrclass, fctname) rettype (* const fctname)#define CONST(consttype, memclass) const consttype#define VAR(vartype, memclass) vartype#define P2P2VAR(ptrtype, memclass, ptrclass) ptrtype **
这样只需要在C.tom末尾添加上述内容去掉前面的#define就可以了 例如
FUNC(rettype, memclass) rettype
FUNC_P2CONST(rettype, ptrclass, memclass) const rettype *
FUNC_P2VAR(rettype, ptrclass, memclass) rettype *
P2VAR(ptrtype, memclass, ptrclass) ptrtype *
P2CONST(ptrtype, memclass, ptrclass) const ptrtype *
CONSTP2VAR(ptrtype, memclass, ptrclass) ptrtype * const
CONSTP2CONST(ptrtype, memclass, ptrclass) const ptrtype * const
P2FUNC(rettype, ptrclass, fctname) rettype (* fctname)
CONSTP2FUNC(rettype, ptrclass, fctname) rettype (* const fctname)
CONST(consttype, memclass) const consttype
VAR(vartype, memclass) vartype
P2P2VAR(ptrtype, memclass, ptrclass) ptrtype ** 还有别的宏
上述的内容比较常用下面讲讲个性化的。 可能还会遇到各种各样奇奇怪怪的用法甚至还有些函数在代码里都搜索不到实际上都可能是宏甚至是字符串拼接宏。
例如常见的
TASK(your_task_name){...}
实际上这是一个定义在OS User Interface系列头文件中的宏
#define Task(TaskName) void Os_Task_##TaskName(void) 在C.tom中就可以直接写上 Task(TaskName) void Os_Task_##TaskName(void) 修改完之后重启source insight或者rebuild工程可以让修改生效