基于官方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
# $: TOPDIR if specified CURDIR=$(pwd)
TOPDIR=$CURDIR
TMPHDR=/tmp/.tmp.headers
[ -n "$1" ] && TOPDIR=$ header_files=$(find ${TOPDIR} -name "*.h")
echo -n > $TMPHDR
for h in $header_files
do
echo ${h#${TOPDIR}/} >> $TMPHDR
done unhandled_headers=
target_files=$(find ${CURDIR} -name "*.c" -o -name "*.h")
for t in $target_files
do
echo "Handling ${t#${CURDIR}/}..."
_headers=$(grep "#include" $t | awk '{print $2}')
for h in ${_headers}
do
echo -n " $h"
[ "${h:0:1}" == "<" ] && echo && continue # for the double-quote
nh=$(grep -w ${h::-} $TMPHDR >/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
done
done echo "Header files not handled: $unhandled_headers" #rm -f $TMPHDR

ArcCore重构-头文件引用问题的初步解决的更多相关文章

  1. vscode中c/c++头文件引用找不到飘红

    正在进行 GTK 学习, 但是在 vscode GTK 的头文件找不到(头文件引用底下飘红, 逼死强迫症), 影响敲字键入速度. 解决一下该问题-- vscode中c/c++头文件引用找不到(#inc ...

  2. Object-c 语法 - 头文件引用(@class/#import/#include)

    一. Objective-C 中 #import 和 #include 的区别 预编译指令 Objective-C:#import:由gcc编译器支持 C,C++:#include 在 Objecti ...

  3. C语言头文件引用

    1,引用分为两种 firs:include<fileName.h> 引用系统头文件一般用<>. second:include"fileName.h" 引用自 ...

  4. 基于Xcode8插件开发~一键检测处理头文件引用

    Xcode8开放了新的一个Extension:Xcode Source Editor Extension,目的是让开发者可以正规的自主为IDE编写插件,虽然说系统现提供的功能还比较拮据,但是不妨碍我们 ...

  5. vc++中 .H 头文件引用的顺序与符号关系

    在使用 #include "math.h"  和 #include <math.h>时,引号 与尖括号的区别如下 此时math.h_1 在工程文件中 math.h_2 ...

  6. pod导入第三方库头文件不能自动联想的解决方法

    使用了一段时间CocoaPods来管理Objective-c的类库,方便了不少.但是有一个小问题,当我在xcode输入import关键字的时候,没有自动联想补齐代码的功能,需要手工敲全了文件名,难以适 ...

  7. 引用其他头文件时出现这种错误,莫名其妙,error C2065: “ColorMatrix”: 未声明的标识符

    今天做项目时,直接拷贝了另一个工程里的头文件和源文件,然后运行时就出现这种问题,莫名其妙,在原程序里运行一点问题就没有,但是在新工程里就是error. >e:\c++\button_fly2\b ...

  8. VS2010 正则批量替换头文件路径

        最近在项目实践中,需要统一对工程头文件进行重构,具体要求是,将之前 #include "../../abc/def.h" 类似的头文件引用路径 替换为#include &q ...

  9. 系统头文件cmath,cstdlib报错

    >C:\Program Files (x86)\Microsoft Visual Studio\\Community\VC\Tools\MSVC\\include\cstdlib(): erro ...

随机推荐

  1. Android指南针之加速度传感器地磁传感器-android学习之旅(67)

    由于andorid不推荐用传统的方向传感器,推荐用加速度传感器和地磁传感器来构造得到方向传感器的数据,其实主要是z轴的旋转角度 具体代码示例 代码如下 public class MainActivit ...

  2. Java 对象在堆中的内存结构

    翻译人员: 铁锚 翻译日期: 2013年11月8日 原文链接:  What do Java objects look like in memory during run-time? 我们知道,函数每次 ...

  3. 敏捷测试(6)--基于story的敏捷基础知识

    基于story的敏捷基础知识----需求管理(三) (3)每日站会 站会的目的有三个: (1)周知进度 仅从用户故事和任务的层面周知进度,任务进度只有两种状态:完成或未完成(完成百分比). (2)周知 ...

  4. JAVA之旅(二)——if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结

    JAVA之旅(二)--if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结 JAVA的思想真的很重要,所以要专心的学-- ...

  5. 更改EBS R12中forms的模式Servlet/Socket

    EBS R12中forms的模式有:Servlet mode 和 Forms Socket mode 当我们完成Oracle EBS R12套件的快速安装后,forms的默认配置是Servlet mo ...

  6. Android源码浅析(一)——VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置

    Android源码浅析(一)--VMware Workstation Pro和Ubuntu Kylin 16.04 LTS安装配置 最近地方工作,就是接触源码的东西了,所以好东西还是要分享,系列开了这 ...

  7. Palette状态栏颜色提取,写的不错就分享了

    Palette 说Palette之前先说下前面提到的Pager.ViewPager是什么大家应该都是知道的了,一般ViewPager.xxxTabStrip.Fragment三个好基友是一起出现的.这 ...

  8. 如何缩放SpriteBuilder中的scene

    我们在制作游戏的level时,往往会发现level的长或宽会大大超过窗口的尺寸.比如在类似超级马里奥游戏中(iphone横屏显示),level的宽度为5000,而窗口的宽只有960. 我想快速查看到l ...

  9. PS 图像调整算法——反相

    这个顾名思义,对图像做减法. Image_new=1-Image_old; 原图: 反相:

  10. redis注册成window服务

    注册服务 redis-server.exe –service-install redis.windows.conf 删除服务 redis-server –service-uninstall 开启服务 ...