详c++中解的# # #和

  介绍

这期内容当中小编将会给大家带来有关详c++中解的#,# #和,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

在学习<代码> # 和<代码> # # 之前,先来看一个关于“的例子:

 # include & lt; stdio.h>
  # include & lt; string.h>
  
  int main ()
  {
  const char * p1=澳愫?““世界!“;//一个空格
  const char * p2=澳愫?““世界!“;//多个空格
  const char * p3=澳愫?”“世界!“;//没有空格
  const char * p4=癏ello, World !“;//一个整串
  const char * p5=澳愫?”“诗杰!“//一个不同的串
  
  printf (“p1=% s, strlen (p1)=% d \ n", p1, strlen (p1));
  printf (“p2=% s, strlen (p2)=% d \ n", p2, strlen (p2));
  printf (“p3=% s, strlen (p3)=% d \ n", p3, strlen (p3));
  printf (“p4=% s, strlen (p4)=% d \ n", p4, strlen (p4));
  printf (“p5=% s, strlen (p5)=% d \ n", p5, strlen (p5));
  
  返回0;
  }

输出为:

p1=你好,世界!strlen (p1)=12,
p2=你好,世界!strlen (p2)=12,
p3=你好,世界!strlen (p3)=12,
p4=你好,世界!strlen (p4)=12,
p5=你好,运输代理!strlen (p5)=13,

查看体育文件的常量字符串段,发现经过编译器优化后只存在一个<代码>你好,世界>

详c++中解的#,# #和

即p1, p2, p3, p4这四种写法是等价的,这一点作为之后解释<代码> #>

当用作字符串化操作时,<代码> #>

要点:

    <李>宏定义参数的左右两边的空格会被忽略,参数的各个令牌之间的多个空格会被转换成一个空格。 <李>宏定义参数中含有需要特殊含义字符如“或\时,它们前面会自动被加上转义字符\。

还是通过MSDN上的例子来看看容易懂:

 # define F abc
  #定义B def
  #定义FB (arg) #参数
  #定义FB1 (arg) FB (arg)
  
  FB (F B)
  FB1 (F B) 

初看到时推测这两行预编译出来后效果是一样的,但是看了使用gcc - e编译出来代码,这才理解了MSDN上对“不经扩展”有了更深刻的理解,实际的预编译后代码为:

“F B";   “abc def";

推测变换过程应该如下:

 FB (F B)——比;“# F B——; F B"
  FB1 (F B)——比;FB1 (abc def)——比;FB (abc def)——比;# abc def——比;“abc def"

标记连接操作(# #)
将多个令牌连接成一个令牌。
要点:

    <李>它不能是宏定义中的第一个或最后一个令牌。 <李>前后的空格可有可无。

来理解一下MSDN上举的例子:

 # include & lt; stdio.h>
  #定义贴纸(n) printf_s (“token"# n“;=% d"标记# # n)
  int token9=9;
  
  int main ()
  {
  贴纸(9);
  }
  
  

<代码>贴纸(9);>

    <李>贴纸(9); <李> printf_s (“token"# 9“=% d"标记# # 9); <李> printf_s (“token"“9”;“;=% d" token9); <李> printf_s (“token9=% d", token9);

这样应该就很好理解了。

上述就是小编为大家分享的详c++中解的#,# #和了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

详c++中解的# # #和