转自<http://www.cppblog.com/elva/archive/2009/08/19/93778.html>
先说宏和函数的区别:
1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型.
2. 宏的参数替换是不经计算而直接处理的,而函数调用是将实参的值传递给形参,既然说是值,自然是计算得来的.
3. 宏在编译之前进行,即先用宏体替换宏名,然后再编译的,而函数显然是编译之后,在执行时,才调用的.因此,宏占用的是编译的时间,而函数占用的是执行时的时间.
4. 宏的参数是不占内存空间的,因为只是做字符串的替换,而函数调用时的参数传递则是具体变量之间的信息传递,形参作为函数的局部变量,显然是占用内存的.
5. 函数的调用是需要付出一定的时空开销的,因为系统在调用函数时,要保留现场,然后转入被调用函数去执行,调用完,再返回主调函数,此时再恢复现场,这些操作,显然在宏中是没有的.
现在来看内联函数:
所 谓"内联函数"就是将很简单的函数"内嵌"到调用他的程序代码中,只样做的目的是为了避免上面说到的第5点,目的旨在节约下原本函数调用时的时空开销.但 必须注意的是:作为内联函数,函数体必须十分简单,不能含有循环、条件、选择等复杂的结构,否则就不能做为内联函数了。事实上,即便你没有指定函数为内联 函数,有的编译系统也会自动将很简单的函数作为内联函数处理;而对于复杂的函数,即便你指定他为内联函数,系统也不会理会的。
相关推荐
内联函数在运行时可调试,而宏定义不可以;2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 3.内联函数可以访问类的成员变量,宏定义则不能; 4.在类中声明同时定义的成员...
内联函数和宏定义在C语言中都是用来优化程序性能的工具,但它们在使用上有着本质的区别。内联函数提供了更加安全和可调试的代码替代宏定义,尤其是在需要兼顾性能和代码可读性的场景下。 内联函数是C++引入的概念,...
宏定义和内联函数都可以用来提高代码的执行效率,但它们在实现方式和使用场景上有所不同。宏定义在预处理阶段进行文本替换,不进行类型检查,而内联函数在编译时进行类型检查。宏定义适用于简单的代码替换,而内联...
预处理宏和内联函数在C/C++编程中都是为了提升程序效率而设计的工具,但它们在使用上有着本质的区别。本文将深入探讨这两种技术,帮助开发者更好地理解和利用它们。 首先,预处理宏是一种在编译之前进行的文本替换...
内联函数和宏定义是C++中两种用于优化程序性能的技术,它们都能在一定程度上减少函数调用带来的开销。然而,两者之间存在着显著的区别。 首先,内联函数(inline)是C++的一个特性,它允许函数的代码在编译时被插入...
内联函数(inline function)是 C++ 语言中的一种特殊函数,具有优缺点,今天我们将深入探究内联函数的定义格式、编程风格、优缺点、使用注意事项,以及与宏的区别。 首先,内联函数的定义格式是将关键字 `inline` ...
内联函数的设计目标是替代C语言中的宏定义,克服宏定义的一些弊端,同时保留其效率优势。 在C语言中,宏定义(如`#define ExpressionName(Var1, Var2) ((Var1)+(Var2))*((Var1)-(Var2))`)通过预处理器进行文本替换...
内联函数是一种编译时的优化手段,它的主要目的是消除函数调用时的开销,如栈帧的建立、参数传递和返回值的处理。通过在源代码中将函数体插入到每个调用点来实现这个目标。内联函数使用`inline`关键字声明,但是否真...
通过阅读“VC中内联函数的定义和案例共3页.pdf”文档,开发者可以获得深入理解,知道何时何地适当地使用内联函数来优化代码,提高程序性能。同时,也应了解其潜在的限制,以避免不必要的副作用。
宏定义和函数调用各有优劣。宏定义适用于简单的常量定义和文本替换,但在复杂的应用场景下应谨慎使用,以避免引入难以调试的错误。相比之下,函数调用提供了一种更安全、更灵活且易于维护的代码组织方式,尤其是在...
2. **作用域限制**:内联函数不会导致全局名字空间的污染,而宏定义的是全局的。 3. **访问控制**:内联函数可以访问类的私有和受保护成员。 4. **避免宏的副作用问题**:内联函数避免了宏可能导致的多次副作用问题...
在C语言编程中,宏和内联函数是两种常见的代码优化技术,它们都可以用来提高程序的执行效率。本文将详细探讨宏和内联函数的作用、用法及其在实际编程中的应用。 宏,全称为预处理器宏,是C语言中预处理器(cpp)的...
3. **作用域和命名空间污染**:宏定义在整个文件中可见,容易引起命名冲突,且不支持作用域限制。 4. **无法捕获异常**:宏函数不是真正的函数,无法使用try-catch块来处理异常,可能导致程序在运行时出现不可预见...
总而言之,《重点Linux源码分析》深入探讨了Linux内核源码中使用的GNU C语言扩展和编程技巧,包括内联函数、数据类型、属性描述符以及宏定义的使用,这些都是理解和分析Linux内核的关键知识点。通过学习这些内容,...
宏定义通常使用`#define`来声明,如示例中的`#define TABLE_COMP(x)((x)>0?(x):0)`。这里定义了一个名为`TABLE_COMP`的宏,其功能是返回非负数`x`本身或0。 **优点:** - **代码简化:**可以将复杂的表达式或代码...
内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值类型在声明中都有明确的指定;而带参数宏定义的参数没有类型的概念,只有在宏展开以后,才由编译器检查语法,这就存在很多的安全隐患。 使用...
普通函数是一种传统的函数类型,它的定义和调用方式与内联函数相同。普通函数的定义体现在函数头文件中,而函数体则定义在源文件中。当我们调用普通函数时,编译器会将函数调用代码替换为函数体代码,从而实现函数的...