inline应该在声明的时候还是在定义的时候使用?

Expect_excellent 2014-08-16 11:34:40
上课的时候谭浩强的书上说: 可以在声明函数和定义函数同时写inline,也可以只在函数声明时加inline,而定义函数是不加inline。只要在调用该函数之前把inline的信息告知编译系统就可以。
可是我的dev-cpp不能把这个函数当做内联函数呀!
#include <iostream>
using namespace std;
int main()
{inline void display(int);
int a;
cin>>a;
display(a);
return 0;
}
void display(int a)
{
cout<<a<<endl;}// [Warning] inline function 'void display(int)' used but never defined [enabled by default]


只有这样写才可以
#include <iostream>
using namespace std;
inline void display(int a)
{
cout<<a<<endl;}
int main()
{

int a;
cin>>a;
display(a);
return 0;
}

c++标准是怎么规定的?
...全文
1240 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
辰岡墨竹 2014-08-22
  • 打赏
  • 举报
回复
呵呵,犯了一些错误。 函数声明(不是定义,标准C不允许嵌套函数)是可以写在函数里的,这是一种现代代码极少用的写法。在K&R的C里可能比较多,和旧式函数声明一样都是遗留的特性,最好不要用。 另外C++里。inline是定义时有效的特性,声明时写是没用的,所以C++里内联函数一般就是你在类的声明里定义的函数,或者类的声明外边定义的函数(定义需要inline,声明不需要)。 对于C语言,只有声明为static inline;或者所有的定义、声明都包含inline,且无extern时,这个函数是会被内联展开的。 如果函数声明中包含extern或者没有全部都写inline,那么是不会展开的,这种函数可以被别的模块调用。
xiaohuh421 2014-08-20
  • 打赏
  • 举报
回复
如果是跨文件使用的, 一般是放到头文件中, 因为它其它文件会包含此头文件. 如果不跨文件使用, 一般就是放在.cpp中. 就算前面写了inline, 也只是"建议"编译器内联, 并不是必然内联. 当开了优化, 可能你没有定义inline可能也会自动inline.
风行踩火轮 2014-08-20
  • 打赏
  • 举报
回复
函数声明怎么可以写在main函数里面呢,这不能怪谭老吧
神奕 2014-08-17
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;
inline void display(int);
int main()
{
    int a;
    cin>>a;
    display(a);
    return 0;
}
void display(int a)
{
    cout<<a<<endl;
}
wanght99 2014-08-17
  • 打赏
  • 举报
回复
把这行放在函数体外就没警告了
inline void display(int);
cutter_point 2014-08-17
  • 打赏
  • 举报
回复
首先内联函数出来是为了取代C中宏定义的不足的,学习C++我们一般尽量或是完全不用C中的定义宏 声明内联函数 如果是在类里面定义函数是自动默认为内联函数的 而一般的函数要编译器使用内联函数的方式必须是声明和定义写在一起 就是

inline void fun()
{
   //请把定义也写出来
}
更加详细的内容,请百度Tinking in C++ 第9章 内联函数
Expect_excellent 2014-08-17
  • 打赏
  • 举报
回复
引用 6 楼 Bokutake 的回复:
其实这个不怪谭老,是楼主自己声明的不对。函数声明必须写在函数外边,不能写在main函数里。好好看一下函数声明的章节。 另外inline就是声明时有效的关键字,你在定义的时候写是没有意义的(除非你是第二种写法那样,函数声明和定义合一)。
虽然建议函数声明写在main外,但是写在main里是可以的,没有那本书会说必须写在main外。谭书上除了inline的声明在main外,其他的比较短小的程序函数声明都在main外。 再者,如果是一个类,在类外定义时写inline是有用的。
#include <iostream>
#include <string>
using namespace std;
struct student
{  int num=0;
   int score=100;
   void display();
};
inline void student::display()
{cout<<num<<" "<<score<<endl;}
int main()
{ student st1;
   st1.display();}
辰岡墨竹 2014-08-17
  • 打赏
  • 举报
回复
其实这个不怪谭老,是楼主自己声明的不对。函数声明必须写在函数外边,不能写在main函数里。好好看一下函数声明的章节。 另外inline就是声明时有效的关键字,你在定义的时候写是没有意义的(除非你是第二种写法那样,函数声明和定义合一)。
max_min_ 2014-08-17
  • 打赏
  • 举报
回复
既然是inline的话,应该都是比较短小的函数了,直接头文件定义了
derekrose 2014-08-16
  • 打赏
  • 举报
回复
。。。。。。。。。。。。。。
taodm 2014-08-16
  • 打赏
  • 举报
回复
珍惜生命吧,远离谭老!

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧