C++/C 宏定义(define)中# ## 的含义

define 中的# ## 一般是用来拼接字符串的,但是实际使用过程中,有哪些细微的差别呢,我们通过几个例子来看看。

#是字符串化的意思,出现在宏定义中的#是把跟在后面的参数转成一个字符串;

eg:

#define  strcpy__(dst, src)      strcpy(dst, #src)

strcpy__(buff,abc)  相当于 strcpy__(buff,“abc”)

##是连接符号,把参数连接在一起

#define FUN(arg)     my##arg

则     FUN(ABC)

等价于  myABC

再看一个具体的例子

#include <iostream>

using namespace std;

#define  OUTPUT(A) cout<<#A<<":"<<(A)<<endl;

int main() {

int a=1,b=2;

OUTPUT(a);

OUTPUT(b);

OUTPUT(a+b);

return 1; }

去掉#号我们得到这样的结果,直接把a,b的值打印出来了,这是符合语法规则的,所以#的作用显而易见。   #include <iostream>

using namespace std;

#define  OUTPUT(A) cout<<A<<":"<<(A)<<endl;

int main()

{

int a=1,b=2;

OUTPUT(a);

OUTPUT(b);

OUTPUT(a+b);

return 1;

}

C++/C 宏定义(define)中# ## 的含义 宏拼接的更多相关文章

  1. C++ 宏定义#define 中##的使用

    在C++的宏定义中,符号##一般是用于连接,包括参数的连接,参数与标识符的连接等,然后形成一个新的标识符. 下面举几个例子来进行说明. eg1: #define ADD(a,b) a##b #defi ...

  2. 宏定义#define和typedef的区别和典型范例题目辨析

    宏定义#define pStr char*  ,是直接把程序中出现pStr的地方替换成char* ,直接替换: typedef  char * pStr; 是给char*定义一个别名叫做 pStr; ...

  3. C语言 预处理二(宏定义--#define)

    //#define 宏定义(宏定义一般大写) //知识点一-->#define的作用域:从#define开始,从上往下,如果遇到#undef就到#undef处结束,如果没有就是作用于当前整个文件 ...

  4. c语言宏定义#define的理解与资料整理

    1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也会经常耍大牌的,所以我们用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码就就都认 ...

  5. 读书笔记 effective c++ Item 2 尽量使用const,枚举(enums),内联(inlines),不要使用宏定义(define)

    这个条目叫做,尽量使用编译器而不要使用预处理器更好.#define并没有当作语言本身的一部分. 例如下面的例子: #define ASPECT_RATIO 1.653 符号名称永远不会被编译器看到.它 ...

  6. c语言宏定义#define

    1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也会经常耍大牌的,所以我们用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码就就都认 ...

  7. [转]c语言宏定义#define的理解与资料整理

    原文地址:http://www.cnblogs.com/haore147/p/3646934.html 1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也 ...

  8. C语言宏定义#define用法

    #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用 ...

  9. 宏定义#define整理

    一.宏定义#define 优点:一方面可以节省程序的空间上的篇幅,另外,恰当地使用宏定义可提高程序的时间效率.代码可以写的通俗易懂.可以提高程序的清晰性.可读性,使于修改移植等. 缺点:宏定义的使用实 ...

  10. 【C++】内联函数(inline)和宏定义(# define)的优劣及其区别

    一.宏定义:# define 1.为什么要使用宏? 因为调用宏比调用函数更有效率,函数的调用必须要将程序的执行顺序转移到函数所存放的内存地址中,将函数程序内容执行完后,再返回到执行该函数前的地方,这种 ...

随机推荐

  1. Linux 普通用户拿到root权限及使用szrz命令上传下载文件

    1.如何拿到root权限 在shell里如果看到你的命令输入行最前面显示的是 $符号,说明目前账号只有系统的普通权限. 输入:sudo su 这时能看到shell的输入行最前面已经显示的是#号,说明已 ...

  2. 对Tomcat启动或运行时,项目对jar包依赖路径的一些粗浅认知

    Tomcat在运行webapp项目的时候,需要各种依赖jar包.它会从2个地方去找这些包 1.Tomcat自己的lib目录中 2.webapp目录下,webapps\{项目}\WEB-INF\lib ...

  3. Intel微处理器学习笔记(三) 不可见寄存器

    参考资料: 1.  http://blog.chinaunix.net/uid-20797642-id-2495244.html 2.  http://www.techbulo.com/708.htm ...

  4. Python day8常用格式化format类2

    format常用格式化 tp1="i am {},age {},{}".format('LittlePage',18,'boy') tp2="i am {},age {} ...

  5. ninja install error

    ninja install ...... CMake Error at cmake_install.cmake:36 (FILE):  file INSTALL cannot find  " ...

  6. WPF操作RichTextBox

    http://www.cnblogs.com/wzwyc/p/6291895.html

  7. Dubbo项目一段时间后提供者消失

    Dubbo项目用了一段时间后发现接口不通了,错误500 打开监控中心发现提供者不见了 查看下日志文件发现报如下错 2018-08-06 15:10:18,008 [localhost-startSto ...

  8. python-day8-赋值

    # x=10 #链式赋值# a=b=c=d=e=f=10# print(a,b,c,d,e,f) #增量赋值 # x=10# y='a'# temp=x# x=y# y=temp# print(x,y ...

  9. dubbo 心跳

    HeartBeatTask 类封装了心跳定时任务,需要了解的是 provider 和 consumer 都有可能发送心跳. final class HeartBeatTask implements R ...

  10. ES profile 性能优化用——返回各个shard的耗时

    Profile API 都说要致富先修路,要调优当然需要先监控啦,elasticsearch在很多层面都提供了stats方便你来监控调优,但是还不够,其实很多情况下查询速度慢很大一部分原因是糟糕的查询 ...