2019-07-03 c++的宏

看hotspot源码时,涉及到c++的宏,简单了解了一下:

C/C++语言中,预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行相应的转换,预处理过程还会删除程序中的注释和多余的空白符号。预处理指令是以#开头的代码行,#必须是该行除了空白字符外的第一个字符。#后是指令关键字,在#和指令关键字之间允许存在若干空白字符。

#define是C/C++语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率

define中的三个特殊符号:#,##,#@

#define Conn(x,y)  x##y

#define ToChar(x)  #@x

#define ToString(x)  #x

(1) x##y表示什么?表示x连接y,举例说:

intn = Conn(123,456);     /* 结果就是n=123456;*/

char*str = Conn("asdf","adf");    /*结果就是 str = "asdfadf";*/

(2)再来看#@x,其实就是给x加上单引号,结果返回是一个const char。举例说:

char a = ToChar(1);    /* 结果就是a='1'; */

做个越界试验char a = ToChar(123);结果就错了;

但是如果你的参数超过四个字符,编译器就给给你报错了!

error C2015: too many characters in constant   :P

(3)最后看看#x,估计你也明白了,他是给x加双引号

char* str = ToString(123132);  /*就成了str="123132";  */

你可能感兴趣的:(2019-07-03 c++的宏)