define宏定义的基本用法与原理

                                                                     宏定义的用法

一、#define的基本用法

#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。

(1)简单的宏定义(不带参数的宏定义)

#define   <宏名> <字符串>

例:   #define PI 3.1415926

注意几个错误的用法:

       #define NAME "zhang"

      #define 0x abcd

      #define NAME "zhang

(2)带参数的宏定义

  #define   <宏名> (<参数表>)   <宏体>
    例: #define   Sum(a, b)  a + b

如 int n = 3; int m = 5; printf("%d",Sum(m, n));

运行结果为3 +5 = 8;

注意:记住这是简单的替换而已,不要在中间计算结果,一定要替换出表达式之后再算。

如在以下例子中经常出现错误:

#include <stdio.h>  
#define S(a,b) a*b  
  
int main(void)  
{  
    int n = 3;  
    int m = 5;  
    printf("%d",S(n+m,m+n));    
    return 0;  
}  

这道题容易出现的错误结果是64,得到这个结果肯定是这样理解的(3+5)*(5+3)。其实并不是,大家要理解宏定义的概念,

宏定义只是简单的符号替换,而不做其他处理,所以这里得到的结果是3+5*5+3=31。

(3)用于条件编译:(常用形式) #ifndef _AAA_H #define _AAA_H //c/c++代码 #endif

在大规模的开发过程中,特别是跨平台和系统的软件里,define最重要的功能是条件编译。可以在编译的时候通过#define设置编译环境

#ifdef WINDOWS

......

......

#endif

#ifdef LINUX

......

......

#endif

(4)如何定义宏、取消宏

//定义宏

#define [MacroName] [MacroValue]

//取消宏

#undef [MacroName]

 

二、define中的特殊符号:#,##,#@,/

(1)#:字符串化
    若,#define change2string(str) #str;

 则,char *string = change2string(123),变成了char *string = "123"。


(2)##:连接

若,#define GPIO(io) GPIO##io

则,GPIO(A),变成了GPIOA 注意:这里了的变换后的GPIOA必须是已经存在的。

 

(3)@#,字符化

若,#define change2char(ch) @#ch

则,char[3] = change2char(p),就变成了char[3] = 'p';

 

(4)\,将两个行连接到一起

注意:(1)必须要\符号放在行尾,前后添加空格。

(2)当宏定义涉及到数组的时候,就可试一试它。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值