注册 登录
编程论坛 新人交流区

内联函数的测试

parksun 发布于 2007-11-14 14:08, 1748 次点击

#include<iostream>
#include<ctime>

using namespace std;
//----------------------------------------
int calc1(int a,int b)
{
return a+b;
}
//-----------------------------------------
inline int calc2(int a,int b)
{
return a+b;
}
//-----------------------------------------
void main()
{
int x[1000],y[1000],z[1000];
clock_t start,finish;
double dtime;
start = clock();
for(int i=0; i<1000; ++i)
for(int j=0; j<1000; ++j)
for(int k=0; k<1000; ++k)
z[i] = calc1(x[j],y[k]);
finish = clock();
dtime = finish - start;
cout<<"not using inline: "<<dtime<<" seconds\n";
start = clock();
for(int i=0; i<1000; ++i)
for(int j=0; j<1000; ++j)
for(int k=0; k<1000; ++k)
z[i] = calc2(x[j],y[k]);
finish = clock();
dtime = finish - start;
cout<<" using inline: "<<dtime<<" seconds\n";
} 怎么输不出结果,编译时i重定义了,没有重定义呀!谁能帮我分析以下.
using namespace std;
//----------------------------------------
int calc1(int a,int b)
{
return a+b;
}
//-----------------------------------------
inline int calc2(int a,int b)
{
return a+b;
}
//-----------------------------------------
void main()
{
int x[1000],y[1000],z[1000];
clock_t start,finish;
double dtime;
start = clock();
for(int i=0; i<1000; ++i)
for(int j=0; j<1000; ++j)
z[i] = calc1(x[i]y[j]);
finish = clock();
dtime = finish - start;
cout<<"not using inline: "<<dtime<<" seconds\n";
start = clock();
for( i=0; i<1000; ++i)
for(int j=0; j<1000; ++j)
z[i] = calc2(x[i],y[j]);
finish = clock();
dtime = finish - start;
cout<<" using inline: "<<dtime<<" seconds\n";
}修改后能输出结果了,但是有时使用内联函数运行所需的时间比不使用还要多,谁能解释以下.

10 回复
#2
zjhofzj2007-11-14 21:36
楼主 你用的是什么编译器 我用的是DEV 第一个完全没问题(我把 void main()改成 int main()和return 0;然后在for循环里加了下花括号 应该没影响吧)至于为什么时间反而长 我把内联直接去掉 弄成 z[i]=x[j]+y[k];结果快了好多 貌似 很神奇 弄不懂 会不会是1。不符合内联的条件 2。把函数加进循环费太多时间(貌似说不通)
如果找出原因不要忘了发上来哦
#3
雨中飞燕2007-11-15 00:45
最外面一层for加一个大括号,比如:
{
for(int i=0; i<1000; ++i)
for(int j=0; j<1000; ++j)
for(int k=0; k<1000; ++k)
z[i] = calc1(x[j],y[k]);
}



by 雨中飞燕 C/C++学习讨论群:46520219
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge)论坛:[/url] http://yzfy.org/blog/blog.php?uid=2

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url] [url=http://blog.programfan.com/article.asp?id=24801]请不要写出非int声明的main函数[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=181314" target="_blank">https://yzfy.org/bbs/
Blog: http://yzfy.org/blog/blog.php?uid=2

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url] [url=http://blog.programfan.com/article.asp?id=24801]请不要写出非int声明的main函数[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=181314
]C++编写的Windows界面游戏[/url]
#4
parksun2007-11-15 16:25
回复:(parksun)内联函数的测试

我用的是VC++6.0编译器,如果像你那样改的话就失去了程序的含义了..

#5
parksun2007-11-15 16:28
回复:(雨中飞燕)最外面一层for加一个大括号,比如:...
加不加大大括号不会影响i的作用域吧!
#6
雨中飞燕2007-11-15 16:31
谁叫你用的VC6???你爱加不加
叫了你加你都不试试的话那偶也没必要给你解释




by 雨中飞燕 C/C++学习讨论群:46520219
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge)论坛:[/url] http://yzfy.org/blog/blog.php?uid=2

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url] [url=http://blog.programfan.com/article.asp?id=24801]请不要写出非int声明的main函数[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=181314" target="_blank">https://yzfy.org/bbs/
Blog: http://yzfy.org/blog/blog.php?uid=2

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url] [url=http://blog.programfan.com/article.asp?id=24801]请不要写出非int声明的main函数[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=181314
]C++编写的Windows界面游戏[/url]
#7
parksun2007-11-15 16:48
回复:(雨中飞燕)谁叫你用的VC6???你爱加不加叫了...
在VC++6.0里试过了,不可以还是通不过,解释一下,谢谢了,顺便推荐个编译器我试一下....
#8
雨中飞燕2007-11-15 17:03
以下这两块
for(int i=0; i<1000; ++i)
for(int j=0; j<1000; ++j)
for(int k=0; k<1000; ++k)
z[i] = calc1(x[j],y[k]);
for(int i=0; i<1000; ++i)
for(int j=0; j<1000; ++j)
for(int k=0; k<1000; ++k)
z[i] = calc2(x[j],y[k]);
VC6里就判为重定义,偶叫你加大括号,你一定是没有试,不试就算了



by 雨中飞燕 C/C++学习讨论群:46520219
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge)论坛:[/url] http://yzfy.org/blog/blog.php?uid=2

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url] [url=http://blog.programfan.com/article.asp?id=24801]请不要写出非int声明的main函数[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=181314" target="_blank">https://yzfy.org/bbs/
Blog: http://yzfy.org/blog/blog.php?uid=2

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url] [url=http://blog.programfan.com/article.asp?id=24801]请不要写出非int声明的main函数[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=181314
]C++编写的Windows界面游戏[/url]
#9
swjuen2007-11-15 17:32
学习~~~~~~~~~~~~~
#10
luckyday2007-11-15 19:02
看得真累
#11
zhouqingwuji2007-11-20 23:32

做人很累啊!?看帖看到眼酸

1