C语言最快吗
很多人认为C语言的运行效率是除汇编之外最高的语音,有段时间我也这么认为过,但我编程并不很在乎运行效率,因为很多时候并不需要高效。但昨天我写的脚步解析器运行结果,让我彻底放弃C语言是最高效的语言。
各种编程语言,无非就是解释顺序、判断和循环三个逻辑,谁解释的好,谁的效率就高,有些时候同样表意的代码,脚本都比C语言高效。但有些时候,你又不得不佩服C语言的设计者,他可以让青出于蓝而胜于蓝。昨晚我测试我的脚本解析器,解析if else,结果在尝试1000次的时候脚本解析居然比C语言调用函数还快。本身我的脚本解析器就是使用C语言编写的。
故而发表文章求解释,如多本脚本感兴趣,可以发邮件到wjh_2010@163.com与我联系。
我的脚本解释如下:
真假判断:字符串为””为假,其他情况为真。
语句结束:每条语句以换行结束
如何理解:脚本最简单的理解方式就是将其展开,除了关键字就是执行命令
测试结果如下:
脚本执行完成 2776ms
测试完成 3011ms
执行1000次,多-235ms
具体测试脚本和测试代码如下:
脚本scriptParser-2.sp:
//测试条件语句
if print 123
{
print 上面有输出123
}
else
{
print 456
}
print 不能输出 456
if 789
print 789
else
print abc
print 输出789 不能输出abc
if wjh
{
print wjh
}
else
{
print lumei
}
if
{
print 不能输出lumei
}
else
{
print 输出lumei
}
if abc
{
if 123
printqwe
}
if
{
}
else if zxc
print zxc
if 1=1
print 1111
else
print 222
if a=0
print 1111
else
print222
if
{
if aaa
{
if
{
}
else
{
print jkl
}
}
}
else
{
print nm,
}
测试代码:
void TestScript_1()
{
//测试条件语句
if (print("123"))
{
print("上面有输出123");
}
else
{
print("456");
}
print ("不能输出456");
if (true)//(strlen("789"))
print ("789");
else
print ("abc");
print ("输出789 不能输出abc");
if (true)//(strlen("wjh"))
{
print(" wjh");
}
else
{
print ("lumei");
}
if (false)//(strlen(""))
{
print ("不能输出lumei");
}
else
{
print ("输出lumei");
}
if (true)//(strlen("abc"))
{
if (strlen("123"))
print ("qwe");
}
if (false)//(strlen(""))
{
}
else if (strlen("zxc"))
print ("zxc");
if (true)//(strlen("1=1"))
print ("1111");
else
print ("222");
if (true)//(strlen("a=0"))
print ("1111");
else
print ("222");
if (false)//(strlen(""))
{
if (true)// (strlen("aaa"))
{
if (strlen(""))
{
}
else
{
print ("jkl");
}
}
}
else
{
print ("nm,");
}
}
int _tmain(int argc, _TCHAR* argv[])
{
ScriptParser parser;
do
{
//初始化脚本命令
if (!parser.InitScriptParser(".\\"))
{
printf("初始化脚本命令失败\n");
break;
}
#define TEST_COUNT 1000
//执行脚本解析
DWORD st = GetTickCount();
for (int i=0;i<TEST_COUNT;i++)
{
//printf("======================================\n");
parser.ExecuteParsingFile(".\\scriptParser-2.sp");
}
DWORD el = GetTickCount() - st;
st = GetTickCount();
for (int i=0;i<TEST_COUNT;i++)
{
TestScript_1();
}
DWORD el1 = GetTickCount() - st;
printf("脚本执行完成 %dms\n",el);
printf("测试完成 %dms\n",el1);
printf("执行%d次,多%dms\n",TEST_COUNT,el - el1);
} while (false);
getchar();
return 0;
}