博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ArcCore重构-头文件引用问题的初步解决
阅读量:6196 次
发布时间:2019-06-21

本文共 1544 字,大约阅读时间需要 5 分钟。

基于官方arc-stable-9c57d86f66be,AUTOSAR版本3.1.5
 
基本问题
1. 头文件引用混乱,所有头文件通过从搜索路径(-I)中引用,存在名称污染问题,需加入路径信息;
 
ArcCore代码的编译系统中,定义了大量的inc-y路径,最后使用-I参数将这些路径加入到编译器的命令行参数中。而代码文件中,引用头文件时都是直接使用 #include "xxx.h" 的形式。
 
这样有几个问题:
1. 编译系统负担过重,需要加入大量的头文件搜索路径;
2. 导致头文件名称污染问题,设想如果存在两个相同名称的头文件,则会出现引用混乱,先找到哪个算哪个?
3. 导致代码结构不清,不清楚所引用的头文件的存放位置。不易阅读代码,不易掌握代码结构;
 
重构的目标为:
1. 头文件引用,基于一个相对路径,使用尖括号引用,如: #include <xxx.h> 
2. 大量缩减inc-y的量,只需要少量的几个,如TOPDIR/include, ARCHDIR/include等;
 
反过来看,名称污染问题的可能性是存在的,而当前的代码没有出现问题,在于没有出现同名的头文件。所以有一个简单的解决办法,就是统一基于TOPDIR/include路径,将所有代码文件中的头文件引用进行替换。
 
可以使用脚本来完成这一动作,如下:
#!/bin/bash# $1: TOPDIR if specifiedCURDIR=$(pwd)TOPDIR=$CURDIRTMPHDR=/tmp/.tmp.headers[ -n "$1" ] && TOPDIR=$1header_files=$(find ${TOPDIR} -name "*.h")echo -n > $TMPHDRfor h in $header_filesdo    echo ${h#${TOPDIR}/} >> $TMPHDRdoneunhandled_headers=target_files=$(find ${CURDIR} -name "*.c" -o -name "*.h")for t in $target_filesdo    echo "Handling ${t#${CURDIR}/}..."    _headers=$(grep "#include" $t | awk '{print $2}')    for h in ${_headers}    do        echo -n "  $h"        [ "${h:0:1}" == "<" ] && echo && continue        # 1 for the double-quote        nh=$(grep -w ${h:1:0-1} $TMPHDR 2>/dev/null)        if [ -z "$nh" ]; then            unhandled_headers="$unhandled_headers $h"            echo            continue        fi        [ "${nh:0:8}" == "include/" ] && nh=${nh#"include/"}        echo " ---> <$nh>"        sed -i "s@$h@<$nh>@g" $t    donedoneecho "Header files not handled: $unhandled_headers"#rm -f $TMPHDR

 

转载于:https://www.cnblogs.com/wjcdx/p/8998587.html

你可能感兴趣的文章
POJ 1166 The Clocks 高斯消元 + exgcd(纯属瞎搞)
查看>>
泛型和面向对象C++
查看>>
【版本号公布】Jeecg-P3 1.0 公布,J2EE微服务框架(插件开发)
查看>>
Play Framework, Server Sent Events and Internet Explorer
查看>>
TWS日志查看
查看>>
04-树4. Root of AVL Tree (25)
查看>>
数独1--暴力回溯法(时间超)
查看>>
Spring+SpringMVC+MyBatis深入学习及搭建(十三)——SpringMVC入门程序(二)
查看>>
Servlet的部署开发细节以及注意事项
查看>>
iOS 多线程技术2
查看>>
查看喜爱球队一周比赛安排
查看>>
C语言结构体及函数传递数组參数演示样例
查看>>
linux下向一个文件中的某行插入数据的做法
查看>>
JavaSe:Comparator
查看>>
一个想法照进现实-《IT连》创业项目:一个转折一个反思
查看>>
【POJ 3071】 Football(DP)
查看>>
LinkedIn实时低延迟数据抓取系统Databus开源
查看>>
java程序员必知的8大排序
查看>>
写给一直在背锅的你
查看>>
springcloud(七):配置中心svn示例和refresh
查看>>