#define宏定义浅学

目录

1. 宏是在预处理指令#define中定义的一种操作.

2.条件编译


1. 宏是在预处理指令#define中定义的一种操作.

(1)格式:

#define <宏名/标识符> <字符串>

例如:#define PI 3.14159

(2)常见易错点

    谁让你不加括号的,傻了吧

#include<bits/stdc++.h>
#define circle_area(x) (3*x*x)
using namespace std;
int main()
{
cout<<circle_area(2)<<endl;
cout<<circle_area(1+1)<<endl;
return 0; 
} 

此时我们设PI为3,想用这份代码计算一下⚪的面积,但是看似相同的两行代码,却输出了截然不同的结果。 前者输出为12,后者输出为5。

注意到了吗,这种现象和这篇文章遇到的问题十分相似。

众所周知,宏是一种预处理指令,计算机先预处理再进行计算,所以说这两行看似相同的代码存在着本质上的不同。

circle_area(2) ->  3*2*2=12

circle_area(1+1) -> 3*1+1*1+1=3+1+1=5

所以 ,以后遇到含参的宏定义,一定要把替换文本中的参数括起来,从而强制编译器以正确的顺序计算表达式的值。

2.条件编译

(1)定义:一般情况下,源程序中所有的行都参加编译;但是有时希望其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。

(2)举个栗子:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAaGFuX2x4Xw==,size_13,color_FFFFFF,t_70,g_se,x_16watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAaGFuX2x4Xw==,size_14,color_FFFFFF,t_70,g_se,x_16

 当我们未注释掉FLAG时,上面一条语句为灰色;但是当注释掉FLAG时,下面的语句为灰色。

 (3)预处理器封装。

#ifndef A_H
#define A_H
#endif

用来防止头文件的重复引用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ItsNorth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值