针对这个需求,采用Astyle格式化工具代码,基于2.03版改进。判断条件很简单:如果是顶头的“{”,对C来说,除了extern "C"和结构体,就是函数的开始,而extern "C"一般只在头文件用;对C++来说,除了namespace,基本上就是函数的开始(而namespace一般也只在头文件用--这句话是错的,但是有namespace的时候,函数的{依然是顶格被格式化的,所以依然可用),结构体和namespace的部分现在依然需要手动删除添加的宏定义。只添加了几行代码,且添加代码部分分别用//add by zqb down和//add by zqb up注释包围,表示是添加的用作调试的代码。
添加的代码有三段,均在
void ASConsole::formatFile(const string &fileName_)
void ASConsole::formatFile(const string &fileName_)函数中。
第一段:[cpp] view plaincopyprint
//add by zqb down
out << "#include \"debug.h\"\r\n";
linesOut++;
//add by zqb up
//add by zqb down
out << "#include \"debug.h\"\r\n";
linesOut++;
//add by zqb up表示添加调试宏所在的头文件。
第二段:
//add by zqb down
if(nextLine == "{")
{
out << "\r\n"<<" \t"<<"DEBUG;\r\n";
linesOut++;
}
//add by zqb up
//add by zqb down
if(nextLine == "{")
{
out << "\r\n"<<" \t"<<"DEBUG;\r\n";
linesOut++;
}
//add by zqb up表示添加调试头的具体内容。
第三段:
//add by zqb down filesAreIdentical = false; //add by zqb up //add by zqb down filesAreIdentical = false; //add by zqb up无论什么条件下,都更新到新的文件。
【注】
1、编译报错:newline in constant:使用notepad++打开ASLocalizer.cpp,格式->以UTF-8格式编码,保存文件 重新编译
2、上传的工程中,包含原2.03的工程,更新后使用工程本身的代码作为测试、使用不加第三段添加项导致无法更新文件的MJInterface.cpp代码、使用测试代码编译工程的工程、使用生成的exe对当前文件夹批处理添加调试宏头的脚本、简单的readme.txt。笔者使用的是免费的Microsoft Visual C++ 2008 Express Edition编译vs2008的版本。此处为工程
下载链接
3、使用限制:要求实用ansi的标准格式化(命令行选项是-A1)才是把函数的第一个'{'另起一行顶格