C/C++中##和#宏
来源:互联网 发布:登陆艇升级数据 编辑:程序博客网 时间:2024/05/19 10:10
在c语言/c++中,宏(Macro)是属于编译时期(而非运行时期)的概念,采用关键字define进行定义。它只是一种简单的字符串替换,根据是否带参数分为无参和带参。
它的作用还是很大的,比如提高可移植性,可读性,方便性等等,常见就是替换变量,防止重复包含头文件等
#define MAX 10
#ifndef __HEAD_H__
#define __HEAD_H__
//头文件内容
#endif
这些都不多提,今天主要总结一下我不太熟悉的宏特殊符号及惯用法即#和##。首先是#,它是使用预处理器将一个宏参数转换为一个字符串,即#argument被翻译为“argument”。看下面一段代码:
#define N 10#define PRINT_MACRO(FORMAT, VALUE) \printf("the value of " #VALUE " is " FORMAT "\n", VALUE)#define TO_STRING(s) #sint main(){PRINT_MACRO("%d", N);printf("%s\n", TO_STRING(hello world));getchar();return 0;}
结果显示
而对于宏##,它是一种分隔连接方式,它的作用是先分隔,然后进行强制连接。
#define CAT(a, b) a##bint main(){int aabb = 1;printf("%d\n", CAT(aa, bb));//相当于aabbgetchar();return 0;}
#define GET_SET_PARAMETER_MACRO(type, name) \private: \type _##name; \public: \void set##name(type name) { _##name = name; } \type get##name() { return _##name; }class Test {GET_SET_PARAMETER_MACRO(int, data1);GET_SET_PARAMETER_MACRO(int, data2);};int main(){Test a;a.setdata1(1);cout << a.getdata1() << endl;a.setdata2(2);cout << a.getdata2() << endl;getchar();return 0;}
0 0
- [c、c++]宏中"#"和"##"的用法
- [c、c++]宏中"#"和"##"的用法
- C语言中#和##宏
- C,C++宏中#和##
- C/C++ 宏中#和##
- C/C++中##和#宏
- [c]c中c串和字符串
- C语言中#和##
- c中*和&
- C语言中#,##和#@
- C语言中* 和 &
- C语言中*和&
- C语言中 || 和 &&
- [c、c++]宏中"#"和"##"的用法(zz)
- [c、c++]宏中"#"和"##"的用法(zz)
- [c、c++]宏中"#"和"##"的用法(zz)
- [c、c++]宏中"#"和"##"的用法(zz)
- [c、c++]宏中"#"和"##"的用法(zz)
- 【Android】-- 处理 android 方法总数超过 65536 . the number of method references in a .dex file exceed 64k的两种办法
- jenkins邮箱配置与自动构建
- connection reset by peer 出现的原因及解决方法
- RMQ问题再临 (线段树)
- SQL Server 2008过期导致MSSQLSERVER服务无法启动 报错17051
- C/C++中##和#宏
- 【亲测好用!】Centos6.5安装Sublime text 3-----可创建桌面图标
- 程序的优化和简化技巧之一
- Java NIO通俗编程之总体介绍(一)
- App页面直接跳转到系统Settings的功能
- 数据结构 模式匹配BF和KMP算法实现
- iis错误+HTTP错误 500.19-Internal Server Error 错误代码:0x8007000d
- WebRTC下载编译七步走
- Linux下给磁盘分区、格式化、挂载