我的需求:
    1.问题描述:
        采用多线程机制,分析C/CPP头文件(.h),并以树型结构显示分析结果。
    2.平台:
        任何平台(建议MS-WINDOWS/UNIX OS)
    3.编程平台:
        支持OOP的编程工具(建议VC++)
    4.编程语言:
        C++语言举例说明:
//a.cpp
#include "aa.h"
#include "bb.h"
#ifdef _SOME
  # include <cc.h>
#else
  # include <dd.h>
#endif
Some Code Follwing ...
......//aa.h
#include "aa1.h"
#include <aa2.h>
...//bb.h
#include ...
...//cc.h
#include ...
...//dd.h
#include ...
...程序运行打开一C/CPP文件(如a.cpp),扫描文件提取文件中所包含的头文件(.h),并将主文件(a.cpp)中扫描的头文件作为一级树型列表,用其它线程同时扫描已经提取的头文件,扫描是否含用头文件,如果有则作为当前文件的下一级树型列表,否则中止该线程。一直扫描到最后,但是要注意重复包含的情况。程序用多线程的目的就是为了处理文件中含用多个头文件,用子线程完成其它头文件的扫描工作,这样在速度上比递归算法要快得多,效率也要高。如本例中通过多线程扫描分析的结果:
▄a.cpp
  ▄aa.h
     ▄aa1.h
     ▄aa2.h
       ▄aa21.h
       ▄ ...
  ▄bb.h
     ▄bb1.h
       ▄bb11.h
     ▄ ...
  ▄cc.h
     ▄ ...
  ▄dd.h(* ▄代表树型结点)
提示:在程序中可设三个链表:
a. 正在处理中的头文件表(该链表中存放所有工作线程处理的头文件名)
b. 没有处理的头文件表(该链表中存放线程待处理的头文件名)
c. 错误的头文件表(该链表中存放不存在的,或者出错的头文件名)以上就是问题的描述,该问题综合性比较强,如果有不清题意或者有错误之处,请在本贴中贴出错误或者不明之处,您也可以致信:[email protected]。大家可以发表自己对该问题的看法/思想/程序/,欢迎高手一起交流!
解决后相信这贴将是本BBS线程中的又一精贴。致谢各位!!!

解决方案 »

  1.   

    能不能考虑点周全一点。
    [引用]仅仅一个头文件包含问题嘛。
    有没有考虑到文件包含死循环的情况
    有没有考虑到文件中包含多个头文件,分级扫描这些扫描到的头文件下的其它文件(用多线程来提高程序的效率)

    并不是扫描一个头文件中包含多少其它头文件。
    而是一直扫描到没有包含为止,然后用树型结构列出来。
    请相信:说比做容易!
    Do it yourself! 呵~你试试~~
      

  2.   

    我的想法是:读每一头文件,然后按行处理,每行处理中包括三个方面:
    1、//行注释过滤。
    2、/**/多行注释过滤,这可能不在一行,为每一行做个FLAG,如果是/*多行注释FLAG为TRUE,一直扫描到*/结束,此时FLAG为FALSE,继续按行处理。
    3、条件编译中可能包含头文件。
    可能还有些不足,请指出,谢谢。这是我在析头文件的整个思路,不知道有没有什么不妥?请高手指点一二。