智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4908|回复: 15
打印 上一主题 下一主题

[编程类] 一个关于C语言编程效率的问题

  [复制链接]

8

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
479
威望
327
贡献
114
兑换币
20
注册时间
2009-7-27
在线时间
19 小时
跳转到指定楼层
1#
发表于 2010-3-13 20:11:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
今天看到了一个关于C语言循环效率的问题。
   for(i=0;i<strlen(str);i++)
   这样效率会比较低。
  若改为:
  CHANG=strlen(str)
  for(i=0;i<CHANG;i++)
  会好一些。
  这当然比较好理解。
  后来还有人说,若用#difine CHANG strlen(str);
  效果更好这是为什么呢?

最佳答案

查看完整内容

建议你看看这本书 里面有相关效率问题的介绍 http://www.znczz.com/thread-3964-1-1.html

7

主题

262

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2478
威望
499
贡献
1803
兑换币
0
注册时间
2009-5-12
在线时间
88 小时
2#
发表于 2010-3-13 20:11:26 | 只看该作者
建议你看看这本书 里面有相关效率问题的介绍

http://www.znczz.com/thread-3964-1-1.html
回复

使用道具 举报

12

主题

131

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
497
QQ
威望
350
贡献
127
兑换币
0
注册时间
2010-3-13
在线时间
10 小时
3#
发表于 2010-3-14 16:23:14 | 只看该作者
这是用宏定义,计算机对于宏的处理是,只在开始时处理一次,之后不再处理,所以效率很高
回复

使用道具 举报

7

主题

262

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2478
威望
499
贡献
1803
兑换币
0
注册时间
2009-5-12
在线时间
88 小时
4#
发表于 2010-3-15 17:23:47 | 只看该作者
  for(i=0;i<strlen(str);i++)
要调用strlen函数多次

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

使用道具 举报

8

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
479
威望
327
贡献
114
兑换币
20
注册时间
2009-7-27
在线时间
19 小时
5#
 楼主| 发表于 2010-3-16 14:42:02 | 只看该作者
回复 4# peilet


    谢谢~~
回复

使用道具 举报

8

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
479
威望
327
贡献
114
兑换币
20
注册时间
2009-7-27
在线时间
19 小时
6#
 楼主| 发表于 2010-3-16 14:43:58 | 只看该作者
回复 2# 云淡风轻


    宏定义不是只在编译时有用吗?相当于用#define A B中的B代替A而已吗?
回复

使用道具 举报

7

主题

262

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2478
威望
499
贡献
1803
兑换币
0
注册时间
2009-5-12
在线时间
88 小时
7#
发表于 2010-3-16 15:11:28 | 只看该作者
回复 6# oo7ak47666


    不客气。他的意思就是在编译(预处理)的时候进行字符替换
回复

使用道具 举报

8

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
479
威望
327
贡献
114
兑换币
20
注册时间
2009-7-27
在线时间
19 小时
8#
 楼主| 发表于 2010-3-16 15:25:04 | 只看该作者
回复 7# peilet


    我也是把宏定义理解为  编译(预处理)的时候进行字符替换  ,那这样在循环时,也要进行多次的strlen()吗?
回复

使用道具 举报

7

主题

262

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2478
威望
499
贡献
1803
兑换币
0
注册时间
2009-5-12
在线时间
88 小时
9#
发表于 2010-3-16 19:05:12 | 只看该作者
回复 8# oo7ak47666


    是的,也是要调用很多次。define只起到字符替换的作用,谭的C语言书里写的很清楚。如果宏真的能代替函数并且提前编译,那样整个程序差不多都可以用宏来写了。
回复

使用道具 举报

9

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
470
威望
344
贡献
46
兑换币
26
注册时间
2009-11-24
在线时间
40 小时
10#
发表于 2010-3-16 21:30:56 | 只看该作者
听说有这个说法~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-20 11:37 , Processed in 0.111497 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表