C++内联函数、宏定义和普通函数的区别

C++内联函数、宏定义和普通函数的区别?

宏定义:在预处理阶段进行简单的文本替换,不会进行参数类型检查;

内联函数:在编译器的时候进行代码插入,编译器会在每次调用内联函数的地方直接将内联函数的内容展开,这样可以省去函数压栈和出站的开销提高效率。会进行参数                  类型检查;

普通函数:在函数调用时,跳转到函数地址执行代码;

原文地址:https://www.cnblogs.com/dingou/p/10549225.html

时间: 2024-08-01 22:48:10

C++内联函数、宏定义和普通函数的区别的相关文章

当结构体遇上宏定义,以及函数指针的高级写法(结构体中能用宏定义一个函数?)

一.结构体中可以定义一般的宏定义 如: struct aaa{   #define STATUS_1 100   #define STATUS_2 200   #define STATUS_3 300   ........}: 首先,这里的宏定义是在预编译阶段完成的,编译器此时并不知道什么结构体,所以这些宏是全局可见的.   一个宏定义,如果写在结构体之内,即使与结构体之外的宏定义名字重复了最多是编译警告.可是如果不在结构体之内,名字重复可肯定是error.(未证实,可以做实验,而且可以把两处的

函数式宏定义和自定义函数的区别是什么?

自定义函数: 宏函数 (1)函数式宏定义的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以危险性高:但因为省去了函数的调用,返回,释放,所以效率比自定义函数高: (2)调用真正函数的代码和调用函数式宏定义的代码编译生成的指令不同. 如果MAX是个普通函数,那么它的函数体return a > b ? a : b; 要编译生成指令,代码中出现的每次调用也要编译生成传参指令和call指令.而如果MAX是个函数式宏定义,这个宏定义本身倒不必编译生成指令,但是代码中出现的每次调用编译生

【转】用宏定义代替printf函数

问题提出 有时候我们想用宏定义来决定是编译debug版本的代码还是release的代码,dubug版本的代码会通过printf打印调试信息,release版本的代码则不会.我们总不能对每一条printf都这样写: 1 #if _DEBUG_ 2 printf("hello world!"); 3 #endif 这样子实在是太麻烦了!万一要各个地方都要打印,会使版面看起来很乱. 解决方法 我后来想到一个方法,可以使用宏定义代替printf函数,由于printf是可变参数的函数,这里就要用

6.函数的定义方式,函数的参数问题

涉及内容: 函数的定义方式 函数的文字描述 空操作语句 位置参数 默认参数 关键参数 可变长度参数 函数的定义方式: 函数的文字说明: 为了让别人了解函数的意义,或者避免自己遗忘,可以使用    字符串(不需要赋值,单引号,双引号,多引号都行).#注释   将文字说明写在函数最开始的位置 def function1() : """ 这是这个程序的说明文字 """ print("hello function") return 1

内敛函数宏定义差别

内敛函数(inline函数) 内敛函数一般规模较小,程序再调用这些成员函数时.不是真正的运行函数的调用过程(如保存返回地址等处理).而是把函数代码嵌入程序的调用点(内敛函数在源文件里不是调用而是按原样展开),这样能够大大降低调用成员函数的时间. 类内定义的成员函数默认是内敛函数.由于在c++中一般将类定义放在头文件里.因此这些类内定义的函数也伴随着写入头文件里.函数声明一般在头文件里.而定义是不同意在头文件里的,由于他们要多次被编译. 若是内敛函数,则同意写在头文件里. 内敛函数的定义: 内联函

内敛函数宏定义区别

内敛函数(inline函数) 内敛函数一般规模较小,程序再调用这些成员函数时,不是真正的执行函数的调用过程(如保存返回地址等处理),而是把函数代码嵌入程序的调用点(内敛函数在源文件中不是调用而是按原样展开),这样可以大大减少调用成员函数的时间. 类内定义的成员函数默认是内敛函数.因为在c++中一般将类定义放在头文件中,因此这些类内定义的函数也伴随着写入头文件中.函数声明一般在头文件中,而定义是不允许在头文件中的,因为他们要多次被编译.若是内敛函数,则允许写在头文件中. 内敛函数的定义: 内联函数

[java学习笔记]java语言基础概述之函数的定义和使用&函数传值问题

1.函数 1.什么是函数? 定义在类中的具有特定功能的一段独立小程序. 函数也叫做方法 2.函数的格式 修饰符   返回值类型    函数名(参数类型  形式参数1, 参数类型  形式参数2-) {           执行语句(函数体);           return 返回值;       } 返回值类型:函数运行完成后输出的数据类型. 参数类型:是形式参数的数据类型. 形式参数:是一个变量,用于储存调用函数时传递给函数的实际参数. 实际参数:传递给形参的实际数据. return:结束函数

javascript事件监听中传递匿名函数(嵌套定义的命名函数)与命名函数的区别

项目中有个需求,事件第一次执行(立即执行)与后几次执行不同,但是直接传递定义好的命名函数,返回结果一样..如果通过匿名函数内再嵌套具名函数,结果就能返回正确!代码如下: 代码 <button class="button">按钮</button> (function(w) { //第一次定义需要执行的代码块 var fn = function() { console.log(1); }; var btn = document.querySelector('.but

Javascript基础系列之(七)函数(定义和调运函数)

函数是一个可以随时运行的语句,简单说,函数是完成某个功能的一组语句,它接受0或者多个参数. 函数的基本语法如下 function functionName([arg0,arg1,......argN]){ statement [return[expression]] } 其中,function为自定义函数的关键字,functionName为函数名,arg表示传给函数的各种参数列表,各个参数之间使用逗号隔开.参数可以为空. statement为函数 本省,可以是各种合法的代码块. reture e