Visual Studio 使用正则表达式检查代码规范

        现在的软件项目多数情况下都是多个人一起开发,每个人的编码规范可能都不一样。有些是写C++的,有些写过java,有些还是C风格,导致代码看起来结构很混乱。在以前带过的项目里面,也有试过在项目开始时就制定了一些编程规范,但是效果不佳。经常遇到有问题需要排查,但涉及到别人的代码时,默默地改成自己熟悉的风格,再去细看代码部分(我经常这样干)。最近在网上看到一篇关于使用正则表达式来检查代码规范的文章,写的不错还挺实用的,所以我也就直接拿过来,稍作整理便放上来了:

(1)查if、do、while后是否和(之间有空格

正则表达式:
{^:b*{if\(}|{while\(}|{for\(}|{else:b*if\(}|{switch\(}|{catch\(}} 

 

if(bRight)
{
	//...
}
//改成如下:if和(之间有一个空格
if (bRight)
{
	//...
}



(2)查等号前后没有空格:
正则表达式:
{={[^:b=]}}|{{[^:b:Sm=!><+:Pd%\*/\|&\^\\~]}=}|{[^:b]{[:Sm=!><+:Pd%\*/\|&\^\\~]}=} 

 

if (NULL==pData)
{
	//...
}
//改成如下:==左右都各有一个空格
if (NULL == pData)
{
	//...
}

int nDst=nSrc;
//改成如下:=左右都各有一个空格
int nDst = nSrc;


(3)查{是否有另起一行
正则表达式:
{\).*\{}|{namespace.*\{}|{class.*\{}|{enum.*\{}|{struct.*\{}|{else:b*\{} 

 

if (){
	//...
}
//改成如下:大括号另起一行
if ()
{
	//...
}


(4)查一行是否只定义了一个变量
正则表达式:

{^:b*{int|char|{unsigned:b*char}|void|bool|float|long|unsigned|short|__int64|BOOL|UINT|INT|LONG|byte|BYTE|DWORD|WORD|TCHAR|uint32|time_t|UINT64|INT64|LPCSTR|ULONG|BSTR|HRESULT|HINSTANCE|HANDLE|HBITMAP}:b.*[^],.*[^];} 

int i,j,k;
//应改成如下:
int i = 0;
int j = 0;
int k = 0;


(5)查if while do for等后有没有使用大括号,大括号是否独一行
正则表达式:
{[ \t]:b*{if|else|while|switch}:b*{{.*;}|{.*\n.*;}}} 

 

if (bshow)
	printf("hello world\n");
//改成如下:加上大括号并另起一行
if (bshow)
{
	printf("hello world\n");
}


(6)查变量是否没有初始化
正则表达式:

^:b*{int|char|{unsigned:b*char}|void|bool|float|long|unsigned|short|__int64|BOOL|UINT|INT|LONG|byte|BYTE|DWORD|WORD|TCHAR|uint32|time_t|UINT64|INT64|LPCSTR|ULONG|BSTR|HRESULT|HINSTANCE|HANDLE|HBITMAP}{{:b*}|{:b*\*:b*}}:i{{:b*}|{:b*.∗:b*}};

int i;
//改成如下:变量进行初始化
int i = 0;


(7)<前后和>前后都应该要有空格才对
正则表达式:
{:b*{for|if|while}.*{{[^:b-<>][<>]}|{[^-<>][<>][^:b=]}}}

 

if(i<2)
//改成如下:<前后应要有空格
if(i < 2)


(8)查switch语句是否有default分支
直接查找switch,然后看是否有default分支。
看看每个case语句处是否有break语句;
若觉得是异常,可在default分支加上assert等防御性代码看看。

(9)查<<前后是否有空格
正则表达式:
{{{[^:b\n]}\<\<{[^:b\n]}}|{{[^:b\n]}\<\<}|{\<\<{[^:b\n]}}}

cout<<i<<j<<k;
//改成如下:<<左右都加上空格
cout << i << j << k;


(10)代码中函数与之间空一行
各个函数声明之间、各个函数实现之间都空一行,不要出现无谓的多个空行。
要查找空了2个空行以上的可以采用如下正则表达式:

 

正则表达式:\n\n\n

int max(int i, int j)
{
	return ((i > j)?i:j);
}



int min(int i, int j)
{
	return ((i < j)?i:j);
}

 

(11)计算代码行数

清除空行:

正则表达式:^\s*(?=\r?$)\n

计算代码行数:

正则表达式:b*[^:b#/]+.*

在申请软著时,需要填写代码行数,这时就可以用正则表达式来计算了!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellokandy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值