inline函数使用容易导致出错的问题
2011-08-29 16:32
246 查看
对于inline函数,首先应该要短小(inline只是对编译器的一个建议,编译器是可以忽略的),其次inline函数的定义一定要与调用它的部分在同一个源文件里,不同的源文件可以分别定义一个相同inline函数,内容都可以不同(不违反重复定义原则),但是这样做会引起程序调用的不确定性,应该避免这种情况。为此,可采用将inline函数放在另外一个单独的文件里,那个文件需要用就调用这个文件。
我再dev C++里做了一个测试:
新建一个空工程pj1,里面有两个文件1. cpp,2.cpp
其中1.cpp
inline int min(int a, int b)
{
return a;
}
int Get1(int a, int b)
{
return min(a, b);
}
2.cpp
# include<iostream>
using namespace std;
inline int min(int a, int b)
{
return b;
}
int Get2(int a, int b)
{
return min(a, b);
}
int Get1(int, int);
int main(int argc, char *argv)
{
cout << Get1(3, 4) << endl;
cout << Get2(3, 4) << endl;
char p;
cin >> p;
return 0;
}
结果程序跑出来得结果是:
3
3
很明显程序只调用了1.cpp中的min(),由此引起了问题(没有调用2.cpp中的min()。
我再dev C++里做了一个测试:
新建一个空工程pj1,里面有两个文件1. cpp,2.cpp
其中1.cpp
inline int min(int a, int b)
{
return a;
}
int Get1(int a, int b)
{
return min(a, b);
}
2.cpp
# include<iostream>
using namespace std;
inline int min(int a, int b)
{
return b;
}
int Get2(int a, int b)
{
return min(a, b);
}
int Get1(int, int);
int main(int argc, char *argv)
{
cout << Get1(3, 4) << endl;
cout << Get2(3, 4) << endl;
char p;
cin >> p;
return 0;
}
结果程序跑出来得结果是:
3
3
很明显程序只调用了1.cpp中的min(),由此引起了问题(没有调用2.cpp中的min()。
相关文章推荐
- PHP经验——usort使用函数中调用引用函数的出错问题
- 使用make编译android项目时,修改了文件xml文件名称,导致编译出错的问题原因
- SQL中一些不经意隐式类型转换或者函数使用导致索引失效问题
- PHP中使用了mcrypt_decrypt函数处理Json串后导致Json_decode返回null问题
- FindContours()函数使用时导致的程序崩溃问题的解决方案
- 使用inline-block,使前面img,后面空div居中显示在一行后,导致当div中有内容时,div下移问题
- 使用C++标准库sort自定义比较函数导致死循环问题
- react生命周期函数使用箭头函数,导致mobx-react问题
- 关于MFC使用GDI绘图的两个容易出错的问题
- 嵌入式 解决线程使用sleep或usleep等函数导致整个进程睡眠的问题
- CCTableView使用中容易出错的问题
- 使用C++标准库sort自定义比较函数导致死循环问题
- js中的全局变量和静态变量的使用, js 的调试?- 如果js出错, js引擎 就会停止, 这会 导致 后面的 html中 refer 该函数时, 会报错 函数为定义!!
- 使用XmlDocument的Save方法容易出错的问题
- Axure RP Pro - 相关问题 - 使用正则表达式的较验函数在Firefox下出错
- MFC中使用FindContours()函数使用时导致的程序崩溃问题的解决方案
- Matlab使用xlsread, xlswrite函数导致excel进程无法终止的问题
- ArcGIS——数据库空间SQL(一、oracle中使用sql空间查询及st_astext等函数出错问题)
- MFC项目使用webbrowser控件,点击载入的页面里的文件下载链接后导致程序的崩溃问题的解决方案
- 第14周报告2:使用函数解决实际问题