C语言宏定义

2016年7月28日 星期四15:00

不带参数的宏

#include <stdio.h>

#define COUNT 5

void test();

int main(int argc, const char * argv[]) {

    /**

     预处理指令:

     在我们的文件翻译成0和1之前做的操作我们称之为预处理指令

     一般情况下预处理都是以#号开头

     

     宏定义格式

        1.不带参数的宏定义

        2.带参数的宏定义

        #define 宏名 值

        宏定义后面不要写分号

     

     宏定义的作用:

        会在程序翻译成0和1之前,将所有宏名替换为 宏的值

     

     宏定义在什么时候替换:

     源代码 -> 预处理 -> 汇编 -> 二进制 -> 可执行程序

     

     规范:

     一般情况下宏名都大写,多个单词之间用_隔开

     

     */

    int a[COUNT] = {1,2,3,4,5};

    for (int i = 0; i <COUNT; i++) {

        printf("a[%i] = %i\n",i,a[i]);

    }

    

// #undef COUNT

    /**

     宏定义也有作用域:

     从定义的那一行起,一直到文件末尾

     虽然默认情况下宏定义的作用域是从定义的那一行开始,一直到文件末尾,但是我们也可以通过对应的关键字提前结束宏定义的作用域

     结束宏定义 #undef

     */

    test();

    return 0;

}

 

void test()

{

    int b[COUNT] = {6,7,8,9,0};

    for (int i = 0; i<COUNT; i++) {

        printf("b[%i] = %i\n",i,b[i]);

    }

}

 

带参数的宏

#include <stdio.h>

/**

 SUM 宏的名称

 (v1, v2) 参数,注意点 不需要写成数据类型

 v1 + v2 用于替换的内容

 

 带参数的宏注意点

    1.一般情况下建议写带参数的宏的时候,给每个参数加上一个()

    2.一般情况下建议写带参数的宏的时候,给结果也加上一个()

 */

#define SUM(v1, v2) v1 + v2

 

int main(int argc, const char * argv[]) {

    int a = 10;

    int b = 5;

    /**

     int res = sum(a,b);

     SUM(a,b) v1 == a v2 == b

     a+b

     int res = a+b;

     */

    int res = SUM(a, b);

    printf("res = %i \n",res);

   

    return 0;

    

}

posted @ 2016-07-29 14:02  偷吃的喵  阅读(375)  评论(0编辑  收藏  举报