基于官方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. Dynamics CRM OData方式进行增删改查时报错的问题

    今天在通过OData终结点update记录的时候报"Error processing request stream. The request should be a valid top-le ...

  2. Gradle实现的两种简单的多渠道打包方法

    本来计划今天发Android的官方技术文档的翻译--<Gradle插件用户指南>的第五章的,不过由于昨天晚上没译完,还差几段落,所以只好推后了. 今天就说一下使用Gradle进行类似友盟这 ...

  3. Python学习笔记 - 生成器generator

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # generator 生成器 L = [x * x for x in range(10)] print( ...

  4. Xcode 下cocos-2dx 环境搭建

    一.Cocos2d-x简介 Cocos2d-x是一个开源的移动2D游戏框架,MIT许可证下发布的,这是一个C++ Cocos2d-iPhone项目的版本. Cocos2d-X发展的重点是围绕Cocos ...

  5. 使用JS取得焦点(focus)元素

    原文链接: Get the Focused Element with JavaScript 原文日期: 2014年3月19日 翻译日期: 2014年3月21日 翻译人员: 铁锚 对于良好的用户体验来说 ...

  6. Android应用---基于NDK的samples例程hello-jni学习NDK开发

    Android应用---基于NDK的samples例程hello-jni学习NDK开发 NDK下载地址:http://developer.android.com/tools/sdk/ndk/index ...

  7. 【翻译】使用Sencha Touch创建基于Tizen应用程序

    原文:Building a Tizen App With Sencha Touch 作者:Gautam Agrawal Gautam Agrawal is Sencha's Sr. Product M ...

  8. OAF开发概念和案例总结(项目总结)

    留看: 网上关于OAF学习的资料比较少,最近有些时间,整理了下自己在项目上的经验总结和同学们一下共享一下 和学友一起讨论一下OAF开发,还有两个比较复杂的系列正在整理中..... 一.OAF EO定义 ...

  9. 使用SVM对多类多维数据进行分类

    最近,本人要做个小东西,使用SVM对8类三维数据进行分类,搜索网上,发现大伙讨论的都是二维数据的二分类问题,遂决定自己研究一番.本人首先参考了opencv的tutorial,这也是二维数据的二分类问题 ...

  10. 中国象棋游戏Chess(1) - 棋盘绘制以及棋子的绘制

    本项目都使用QT来实现绘图,没有任何第三方的资源. 工程详情:Github 首先将棋盘设计为一个类Board // Board.h // Board类实现了棋盘的绘制以及显示 // #ifndef B ...