智能车制作

标题: 一个关于C语言编程效率的问题 [打印本页]

作者: oo7ak47666    时间: 2010-3-13 20:11
标题: 一个关于C语言编程效率的问题
今天看到了一个关于C语言循环效率的问题。
   for(i=0;i<strlen(str);i++)
   这样效率会比较低。
  若改为:
  CHANG=strlen(str)
  for(i=0;i<CHANG;i++)
  会好一些。
  这当然比较好理解。
  后来还有人说,若用#difine CHANG strlen(str);
  效果更好这是为什么呢?
作者: peilet    时间: 2010-3-13 20:11
建议你看看这本书 里面有相关效率问题的介绍

http://www.znczz.com/thread-3964-1-1.html
作者: 云淡风轻    时间: 2010-3-14 16:23
这是用宏定义,计算机对于宏的处理是,只在开始时处理一次,之后不再处理,所以效率很高
作者: peilet    时间: 2010-3-15 17:23
  for(i=0;i<strlen(str);i++)
要调用strlen函数多次

CHANG=strlen(str)
  for(i=0;i<CHANG;i++)
只调用一次

作者: oo7ak47666    时间: 2010-3-16 14:42
回复 4# peilet


    谢谢~~
作者: oo7ak47666    时间: 2010-3-16 14:43
回复 2# 云淡风轻


    宏定义不是只在编译时有用吗?相当于用#define A B中的B代替A而已吗?
作者: peilet    时间: 2010-3-16 15:11
回复 6# oo7ak47666


    不客气。他的意思就是在编译(预处理)的时候进行字符替换
作者: oo7ak47666    时间: 2010-3-16 15:25
回复 7# peilet


    我也是把宏定义理解为  编译(预处理)的时候进行字符替换  ,那这样在循环时,也要进行多次的strlen()吗?
作者: peilet    时间: 2010-3-16 19:05
回复 8# oo7ak47666


    是的,也是要调用很多次。define只起到字符替换的作用,谭的C语言书里写的很清楚。如果宏真的能代替函数并且提前编译,那样整个程序差不多都可以用宏来写了。
作者: lxh7792    时间: 2010-3-16 21:30
听说有这个说法~~~
作者: oo7ak47666    时间: 2010-3-16 23:12
回复 10# lxh7792


    你是说在这个事例当中,用了define,可以提高程序效率吗?
作者: oo7ak47666    时间: 2010-3-16 23:14
回复 10# lxh7792


    你是说在这个事例当中,用define可以提高程序运行效率?
作者: anjiayu    时间: 2010-3-17 12:36
路过看看
作者: alexzhangkaiqi    时间: 2010-3-17 12:47
回复 12# oo7ak47666


    显然是降低了
作者: aa8473229    时间: 2010-3-17 14:33
个人认为没变 #define 是宏定义 应该是给编译器看的吧 机器的话。。。。。因为我对计算机不是很了解 所以非专业
作者: 一毛钱~~~~~~    时间: 2012-4-17 23:42
估计不会。。。不确定,。。





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2