关闭

宏函数

标签: 宏函数
579人阅读 评论(0) 收藏 举报
分类:

1. 宏函数定义的时候需要加({ })

比如

#include <stdio.h>
#define swap(a, b) ({(a)=(a)+(b);\
                     (b)=(a)-(b);\
                     (a)=(a)-(b);})

int main(int argc, const char *argv[])
{
    int array[2] = {10, 20};
    printf("array[0] = %d;array[1] = %d\n", array[0], array[1]);
    swap(array[0], array[1]);
    printf("array[0] = %d;array[1] = %d\n", array[0], array[1]);
    return 0;
}                                                         

此函数的说明

a = a + b;
b = a - b; // b = (a + b) - b = a;
a = a - b; // a = (a + b) - (a) = b;

宏函数中为了避免swap(10+3, 12) ,这种情况的出现,应该采用这种方案:

要搞定它其实很简单,别吝啬括号就行了。


2. 宏函数相似返回值的实现

#include <stdio.h>
#define swap(a, b) ({(a)=(a)+(b);\
                     (b)=(a)-(b);\
                     (a)=(a)-(b);\
                      a;})

int main(int argc, const char *argv[])
{
        int array[2] = {10, 20};
        int temp = 0;
        printf("array[0] = %d;array[1] = %d\n", array[0], array[1]);
        temp = swap(array[0], array[1]);
        printf("array[0] = %d;array[1] = %d\n", array[0], array[1]);
        printf("swap = %d\n", temp);
        return 0;
}

在 swap 中,整体的值是最后一个元素的值
即 a 的值

1
0
查看评论

C语言宏定义和宏函数

要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。   在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍。   我们来看一个例...
  • guoqianqian5812
  • guoqianqian5812
  • 2015-11-18 21:34
  • 308

宏函数与自定义函数的区别(面试总结)

在c语言中,函数式宏定义和自定义函数的区别是什么? 自定义函数: 宏函数 (1)函数式宏定义的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以危险性高;但因为省去了函数的调用,返回,释放,所以效率比自定义函数高; (2)调用真正函数的代码和调用函数式宏定义...
  • xinianbuxiu
  • xinianbuxiu
  • 2016-07-29 15:39
  • 2920

Java中定义宏

本文已搬家至【Java学习笔记】Java中定义宏
  • gnuhpc
  • gnuhpc
  • 2009-08-26 09:02
  • 1448

宏的妙用以及与函数的比较

宏所进行的是一个完全的文本替换工作,它的声明方式如下: #define name(parameter-list) stuff 首先,name为命名的一个符号,stuff为替换文本,parameter-list(参数列表)是一个由逗号隔开的符号列表,这些符号可能出现在后面的stuff中。 使用宏...
  • hulifangjiayou
  • hulifangjiayou
  • 2015-03-06 15:00
  • 850

C/C++语言中内容完全相同的多个函数,使用宏函数的写法

假设有这样一个需求:一个项目需要250个函数,但这些函数体内容完全相同,仅函数名不同,例如Func0、Func1、Func2...等等,这样的要求怎么实现呢?(先不要问有没有如此变态的需求) 直接看如何实现:(先写3个吧) //这里是宏函数定义 // 这种函数定义基本覆盖了所有的函数类型, //...
  • dijkstar
  • dijkstar
  • 2015-01-17 20:30
  • 4996

C++/C语言_宏函数存在的问题

C语言中的宏函数可以简化我们的操作。 但是存在一定的问题,宏函数是不能使用++a/a++,--a/a--这种形式的。这样会导致BUG(所得到的结果与预想结果不一致)。 原因就是宏函数是进行的文本拷贝,而不是传递的参数。 示例代码如下: #include using namespa...
  • u010003835
  • u010003835
  • 2015-08-10 10:31
  • 768

C语言宏定义函数的使用(定义单行和多行)

要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。   在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍。   我们来看一个例...
  • u013321328
  • u013321328
  • 2014-02-25 21:17
  • 10000

C语言宏接收函数及其参数

C语言宏接收函数及其参数标签:c/c++#include <stdio.h> #include <stdlib.h>#define call_optimized(function, arguments) {\ printf("\n-------------&...
  • hust_sheng
  • hust_sheng
  • 2016-04-08 10:03
  • 1252

日志宏定义

在编码过程中,我们通常需要打印日志来跟踪程序运行轨迹。 这里定义了几个日志宏,包括以下功能: 1.日志开关(关闭开关,日志将不在打印) 2.日志级别,定义不同的宏,打印不同级别日志 3.精确打印时间、文件、函数、行,变量值等。
  • Since20140504
  • Since20140504
  • 2014-07-29 14:37
  • 945

函数式宏定义与普通函数的区别?C语言宏定义和宏定义函数 ?

http://www.jb51.net/article/41869.htm 尽管函数式宏定义和普通函数相比有很多缺点,但只要小心使用还是会显著提高代码的执行效率,毕竟省去了分配和释放栈帧、传参、传返回值等一系列工作,因此那些简短并且被频繁调用的函数经常用函数式宏定义来代替实现 在C及C+...
  • changyourmind
  • changyourmind
  • 2016-12-15 09:42
  • 3698
    个人资料
    • 访问:295450次
    • 积分:5457
    • 等级:
    • 排名:第5862名
    • 原创:237篇
    • 转载:13篇
    • 译文:3篇
    • 评论:15条
    博客专栏