define 运用

1.标准格式

#define 标识符 字符串

(1) 说明

标识符为所定义的宏名,字符串可以为字符串、常数、表达式。

(2) 例子

#define PI 3.1415926
#define hello "hello world"
#define kk 1+2

2.拓展用法

(1) 带参定义

类似于函数,宏定义中的参数为形参,宏调用中的参数为实参。
格式:

define 宏名(形参表) 字符串

示例:

#define add(a,b) (a+b)  //  看实际情况决定是否加括号
#define mul(a,b) (a*b) 
#define MAX(a,b) a>b?a:b

(2) 定义代码段

可以使用续行符(\)来使代码更加美观。
格式:

define 宏名 {A \
        B \
    ...
}

例子:

define TIME(func) { \
    long long b=clock();  //  输出程序运行时间 \  
    func(); \
    long long e=clock(); \
    printf("%s run %dms",#func,1000*(e-b)/CLOCKS_PER_SEC); \
}

(3) c++内置宏

cout << "程序最后编译日期宏" << __DATE__ << endl;
cout << "程序最后编译时间宏" << __TIME__ << endl;
cout << "当前行数宏" << __LINE__ << endl;
cout << "当前运行文件名宏" << __FILE__ << endl;
cout << "当前运行函数宏" << __FUNCTION__ << endl;
cout << "当前运行函数宏" << __func__ << endl;

3.特殊操作符

(1)#

作用于宏调用中的实参,将实参转化为字符串。
例子:

#define TO_STR(s) #s
#define STR(s) TO_STR(s)
printf("%s\n",STR(sssss));  //  输出sssss

(2)##

这个运算符可以把两个语言符号组合成单个语言符号。
例子:

#define xval(num) x##num
#define print_x(num) printf("x"#num" = %d\n",x##num)
int xval(1)=10;  //  等价于 int x1=10 
print_x(1);  //  等价于 printf("x1 = %d",x1)

4.易错点

#define mul(a,b) a*b
printf("%d\n",mul(1+2,3)); // 输出结果为7,思考原因

5.总结

(1) 宏定义的本质是替换。如上述 mul 宏,最终替换结果为 1+2 * 3,故输出7。
(2) 宏定义不是语句,在行末不必加分号,若加上分号则连分号也一起替换。
(3) 宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序层层代换。
例如:

#define N 10000
#define NN N*N

(4) 可用宏定义表示数据类型,使书写方便。但与 typedef 意义不同,宏只是简单的字符替换,而 typedef 则是给数据类型起别名。
例如:

#define int func
typedef int func;  //  此时用法相同
#define void (*p)() func  //  error! 
typedef void (*func)()  //  correct
  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值