前段时间写了预处理指令define和类型别名定义typedef对比的文章(c语言typedef和define最详细的对比分析),今天聊一聊define定义的宏函数和inline定义的内联函数的异同。#define预处理指令本质上是一种文本替换。如果当前源文件中(注意,不是在整个项目中,#define指令的作用域限定在当前文件内)有比较复杂
1.define 1.定义在预编译时处理的宏,只是简单的字符串替换,没有类型检查 2.inline 1.用来定义一个内联函数,引用inline的主要原因是用它替换C语言中表示式形式的宏定义; 2.在编译阶段完成; 3.内联函数会做类型安全检查; 4.内联函数是嵌入式代码,调用内联函数时,不是跳转到内联函数执行,而是把内联函数的代...
假设我们将max函数定义为内联函数: // 此处注意:inline关键字需要加在函数定义前而非声明前inlineintmax(inta,intb){returna > b ? a : b; } 则cout << max(a, b) << endl;语句,在编译时会被展开为cout << (a > b ? a : b) << endl;从而消除了执行max函数的额外开销。 宏的优点 通过以上...
inline()函数带参数的宏 展开的时机 在编译的时候展开,因此inline关键字是一个编译关键字 在预处理时展开,因此#define关键字是一个预处理关键字 参数类型检查 inline()函数是一中函数,会进行严格的参数类型检查 不会检查参数类型,只是做简单的字符串替换,因此在使用带参数的宏时会有一些副作用,编写程序是要人为预防...
语法:宏使用 #define 关键字定义,而内联函数使用 inline 关键字定义。 作用时间:宏在预处理阶段进行文本替换,而内联函数在编译阶段进行类型检查和可能的替换。 可调试性:由于宏是文本替换,所以调试宏可能比调试内联函数更加困难。 使用建议 当需要快速替换一段代码,并且不关心类型检查时,可以使用宏定义。
步骤1——实现相同操作的#define和inline 1 我们编写一个求一个数平方的运算,#define宏定义实现如下:#define SQUARE1(X)X*Xinline内联函数实现如下:inline int SQUARE2(int X){return X*X;} 步骤2——定义所需变量 1 首先定义所需变量:int a=5,b=5;int s1=0,s2=0;定义a和b值相同,其中a代入#...
有:在类体内定义成员函数:class Fred public: void f(int i, char c) // ... ;尽管这对于写类的人来说很容易,但由于它将类是“什么”(what)和类“如何”(how)工作混在一起.小结总之,在嵌入式C(或C++)编程里面,懂得使用内联函数(inline)与宏定义(#define),并使用好它们,对我们是大有裨益的。(注:...
网上搜索 inline,大多数教程都没怎么讲明白,不是稀里糊涂地四处转载,就是人云亦云地讲 inline 是“优先内联”,即可以使函数内的代码直接在调用处展开,从而减少出入栈空间的开销。这种说法在以前是对的,但现在已过时,inline 关键字的含义已经发生改变,由“建议编译器内联展开”变成了“允许重复定义”。同时,函数是否...
一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例: #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))为什么要取代这…
在C语言程序开发中,inline 一般用于定义函数,inline 函数也被称作“内联函数”,C99 和 GNU C 均支持内联函数。那么在C语言中,内联函数和普通函数有什么不同呢?其实,从 inline 这个名字就应该能看出一点它的性质了——内联函数会在它被调用的位置上展开,这一点表现的和 define 宏定义是非常相似的。