C中的宏和函数有什么区别?

use*_*929 19 c macros function c-preprocessor

C中的宏和函数有什么区别?请告诉我一个可以使用宏和功能的应用程序?

Var*_*ani 24

宏的优点和缺点

好处

  • 时间效率.
  • 不需要像函数一样传递参数.
  • 它是经过预处理的.
  • 更容易阅读.

缺点

  • 在大代码中很难调试.
  • 与功能相比,在堆栈中占用更多内存.假设在程序中有一个使用了50次的宏,这意味着它会占用内存50次,但是如果一个函数被调用50次,它将每次占用单个内存,因为每次它释放该内存


Ale*_*lev 20

基本区别在于编译函数并预处理宏.当您使用函数调用时,它将被转换为ASM CALL,所有这些堆栈操作都传递参数和返回值.当您使用MACRO时,C预处理器将使用宏转换所有字符串而不是编译.

减少使用宏是因为它们隐藏了实现.如果有一个bug,它更难找到bug.


Jim*_*ies 11

在C(和C++)中,宏是预处理器指令.这意味着在程序开始编译之前,它将遍历并处理所有宏.宏很有用,因为

  • 它们可以使您的程序更容易阅读
  • 它们可以提高效率(因为它们可以在编译时计算)
  • 它们可以缩短经常使用的长或复杂的表达式.例如,我们使用宏来获取当前的log4cpp记录器,另外几个用不同的级别写入它.

Disdvatages

  • 扩展可执行文件的大小
  • 如果不小心,可以淹没你的名字空间.例如,如果您有太多的预处理器宏,您可能会在代码中意外使用它们的名称,这可能会让调试变得非常混乱.

#define INCREMENT(x) x++
Run Code Online (Sandbox Code Playgroud)

函数是一段代码,可以相对独立地执行并执行特定任务.您可以将其视为一种数学函数:给定一组输入的函数将给出特定的输出.在C中,这些被定义为

<return type> <name>(<parameters>)
{
  //code body
}
Run Code Online (Sandbox Code Playgroud)