美文网首页工作生活
2019-07-03 c++的宏

2019-07-03 c++的宏

作者: 归去来ming | 来源:发表于2019-07-03 10:47 被阅读0次

    看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++的宏

        本文链接:https://www.haomeiwen.com/subject/euzfhctx.html