3. 宏定义

3. 宏定义

3.1 宏定义的格式:#define 标示符 替换列表
3.2 常见错误:
#define N=10 /* 错误使用了等号(=)*/
#define N 10; /*错误使用了分号(;)*/
3.3 使用宏定义的优点:
3.3.1 程序可读性更强,例如:在程序中使用AGE,比使用20,可读性更强。
3.3.2 程序修改方便,程序中如果有100个地方使用了宏定义,我们只修改宏定义一个地方就可以把100个地方修改
3.3.3 可以避免前后不一致,例如:可能把3.1415写成 3.14,如果定义为宏可以避免写错。
3.3.4 可以对C语法结构做出修改,例如:可以把{}定义为BEGIN 和END
#define BEGIN {
#define END            }
3.3.5 可以进行类型定义,例如: #define BOOL int
3.3.6 控制条件编译,例如: #define DEGUG 1 ,在程序完成后把1改为0,调试信息将不再输出。
3.4 带参宏定义
3.4.1 定义格式:#define 标示符(x1,x2,x3) 替换列表
3.4.2 实例 #define MAX(x,y)  ((x)>(y)?(x):(y))  #define IS_EVEN(n)  ((n)%2==0)
#include <stdio.h>
#define MAX(x,y)    ((x)>(y)?(x):(y))
#define IS_EVEN(x)  ((x)%2==0)
#define AVG(x,y)    (((x)+(y))/2)
void test1(){
    int x = 10,y = 20;
    int r = MAX(x, y);
    printf("r=%d\n",r);
  
    r = IS_EVEN(x);
    printf("r=%d\n",r);
    x = 19;
    r = IS_EVEN(x);
    printf("r=%d\n",r);
    x = 30;
    r = AVG(x, y);
    printf("r=%d\n",r);
}
3.4.3 #运算符
#运算符将参数转换为字符串字面量,例如:#define PRINT_INT(x) printf(#x"=%d\n",x)
#define PRINT_INT(x) printf(#x"=%d\n",x)
void test2(){
    int x = 100;
    PRINT_INT(x);
    int y = 1000;
    PRINT_INT(y);
}
程序输出为:
x=100
y=1000
3.4.4 ##运算符
##运算符将两个标示符连接在一起,例如:#define MK_ID(id)   n##id
#define MK_ID(id)   n##id
void test3(){
    int MK_ID(1),MK_ID(2);// 结果为 int n1,n2;
}
3.5 宏可以嵌套定义,例如:#define PI  3.14 #define PI2 PI*2
#define PI  3.14
#define PI2 PI*2
void test4(){
    float r = 3.0;
    float s = 2*PI*r;
    printf("s=%f\n",s);
    s = PI2*r;
    printf("s=%f\n",s);
}
3.6 系统预定义宏
void test5(){
    // 打印编译信息
    printf("被编译行数=%d\n",__LINE__);
    printf("源文件名=%s\n",__FILE__);
    printf("编译日期:%s,编译时间:%s\n",__DATE__,__TIME__);
    printf("编译器是否支持C标准:%d",__STDC__);
}
程序输出结果:
被编译行数=21
源文件名=/Users/amaker/Desktop/极客网站/01 网站课程/01 iOS 开发/01 c语言/参考资料/new/12 预处理器/C-12-01/C-12-01/main.c
编译日期:Oct 16 2013,编译时间:10:23:41

编译器是否支持C标准:1

该博客教程视频地址:http://geek99.com/node/1016

原文出处:http://geek99.com/node/873#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值