C++ 预处理器、宏、#与##

参考:C++ 预处理器 | 菜鸟教程


 

一、 预处理器

预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理

所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。

我们已经看到,之前所有的实例中都有 #include 指令。这个宏用于把头文件包含到源文件中。

C++ 还支持很多预处理指令,比如 #include、#define、#if、#else、#line 等,让我们一起看看这些重要指令。

二、宏

在编译之前,预先定义的宏(变量)

宏也可以理解为变量

#include <iostream>
using namespace std;
 
#define PI 3.14159
 
int main ()
{
 
    cout << "Value of PI :" << PI << endl; 
 
    return 0;
}

三、条件编译

判断是否定义了这个宏

#ifdef 宏名称
//代码
#endif
#include <iostream>
//#define PI 3.14159
using namespace std;
 

int main ()
{
    #ifdef PI
    cout << "Value of PI :" << PI << endl; 
 	#endif
 	cout << "Value of PI :" << 3 << endl; 
 	
    return 0;
}
#include <iostream>
#define PI 3.14159
using namespace std;
 

int main ()
{
    #ifdef PI
    cout << "Value of PI :" << PI << endl; 
 	#endif
 	cout << "Value of PI :" << 3 << endl; 
 	
    return 0;
}

四、#与##

1.#

#include <iostream>
using namespace std;
 
#define MKSTR( x ) #x
 
int main ()
{
    cout << MKSTR(HELLO C++) << endl;
 
    return 0;
}

结果

HELLO C++

分析:

 MKSTR( x ) 转换成了 x

所以MKSTR(HELLO C++) 转换成了 HELLO C++

2.##

#include <iostream>
using namespace std;
 
#define concat(a, b) a ## b
int main()
{
   int xy = 100;
   
   cout << concat(x, y);
   return 0;
}

结果:

100

分析:

concat(a, b)转换成了 a ## b  即 concat(a, b)转换成了 ab

所以 concat(x, y)转换成了 xy

五、c++文件自带的宏(变量)

参考:Preprocessor directives - C++ Tutorials

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值