C/C++/中宏特殊字符的含义及用法总结(“#”、“##”、"#@"、“\”等等)

在C/C++中,宏定义是由define完成的,宏定义中有几种常见的特殊字符需要我们了解,常用的特殊字符有以下几种:

  • #:在宏展开的时候会将#后面的参数替换成字符串; 字符串化
  • ##:将前后两个的单词拼接在一起; 连接化
  • #@:将值序列变为一个字符;   字符化
  • \:将两行连接起来。行连接化

我们可以使用这些特殊的字符做一些简单的测试例子:

1.# 测试 

测试代码如下:

#include 
#include 

using namespace std;

#define PRINT(name) #name

int _tmain(int argc, _TCHAR* argv[])
{
	char* ch1= PRINT(南抒一梦);
	std::cout << ch1 << std::endl;

	char* ch2 = PRINT(233333);
	std::cout << ch2 << std::endl;

	return 0;
}

输出结果如下:

C/C++/中宏特殊字符的含义及用法总结(“#”、“##”、

2.##测试

测试代码如下 :

#include 
#include 

using namespace std;

#define PRINT(name,value) #name###value 
//#define PRINT(name,value) (#name)##(#value)

int _tmain(int argc, _TCHAR* argv[])
{
	char* ch1= PRINT(南抒一梦,23333);
	std::cout << ch1 << std::endl;

	return 0;
}

输出结果如下:

 C/C++/中宏特殊字符的含义及用法总结(“#”、“##”、

3.#@测试

测试代码:

#include 
#include 

using namespace std;

#define PRINT(ch) #@ch

int _tmain(int argc, _TCHAR* argv[])
{
	char ch1= PRINT(a);
	std::cout << ch1 << std::endl;

	return 0;
}

输出结果如下:

 C/C++/中宏特殊字符的含义及用法总结(“#”、“##”、

4.综合测试

 我们写一个获取类名的宏定义测试代码,如下所示:

#include 
#include 

using namespace std;

#define  DECLARE_CLASS(name)\
		public:\
		virtual char* Get_ClassName()\
        {\
	      return #name;\
       }

class MyClass
{
public:
	DECLARE_CLASS(MyClass)

public:
	MyClass(){}
	virtual ~MyClass(){}
};
int _tmain(int argc, _TCHAR* argv[])
{
	MyClass *pMyClass = new MyClass();
	std::cout << pMyClass->Get_ClassName() << std::endl;

	delete pMyClass;
	pMyClass = nullptr;

	return 0;
}

输出结果如下:

C/C++/中宏特殊字符的含义及用法总结(“#”、“##”、

你可能感兴趣的:(C++笔记)