C/C++宏的一些特殊用法

在C/C++中,宏定义是由define完成的,define中有三个特殊的符号值得我们注意:

1. #:在宏展开的时候会将#后面的参数替换成字符串,如:

#define p(exp) printf(#exp);

调用p(asdfsadf)的时候会将#exp换成"asdfsadf"

2. ##:将前后两个的单词拼接在一起。例如《The C Programming Language》中的例子:

#define cat(x,y) x##y

调用cat(var, 123)展开后成为var123.

3. #@:将值序列变为一个字符

#define ch(c) #@c

调用ch(a)展开后成为‘a‘.

自己写了一小段测试程序:

#define A(a,b) a##b

#define B(a) #a

#define C(a) #@a

#include <iostream>

using namespace std;

void main()

{

int v = 0,v1 = 1,v12 = 2;//v stands for var

cout << A(v1,2) << endl;

cout << B(v1) << endl;

cout << C(v) << endl;

}

结果为:

1

v1

v

在c++面对对象化编程还可以这样用:

#define A

public://此处加一些成员,并且可以在成员名上用##下一些功夫

class Object

{

A

};

C/C++宏的一些特殊用法

时间: 2024-10-06 08:17:33

C/C++宏的一些特殊用法的相关文章

C++中宏的定义与用法(现已被内联函数所代替)

在noip中,宏还是被经常采用,所以这里讲一下,C++中宏的定义与用法 第一种用法——配合条件编译:#define DEBUG 定义一个叫DEBUG的标识符.它应该与#ifdef或#ifndef配合使用.举例如下: #define DEBUG #ifdef DEBUG void print(int v) { cout << v << endl;} #else void print(int) {} #endif 如果符号DEBUG存在,那么编译器会编译上面的.能输出数值的print,

宏定义神级用法-调试信息便捷开关

大家编写程序的时候,一般都会有调试信息,这些调试信息一般长期伴随着,后来要发布的时候发那些不需要的调试信息给删除掉,如果是一个有丰富的经验人,是采用一个宏定义的开关来决定是否启动这些打印信息.代码如下: #include <stdio.h> /******************************************************************************** DEBUG: 0 关闭打印信息 1 打开打印信息 *********************

宏定义#define的用法

预处理#define定义函数 #include <stdio.h> #define Connect(x,y) x##y //"##"表示连接x与y int main(void) { int n = Connect(123,456); printf("n=%d\n",n); return 0; }

宏定义

1.获取屏幕宽度与高度 #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #define SCREENH_HEIGHT [UIScreen mainScreen].bounds.size.height 根据一个网友脱离语言提醒, 如果支持横屏可以用下面的宏: #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 // 当前Xcode支持iOS8及以上 #define SCREEN_WIDT

常用的C语言宏定义

常用的C语言宏定义 1,防止一个头文件被重复包含      #ifndef COMDEF_H      #define COMDEF_H          //头文件内容      #endif       2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植.       typedef   unsigned char       boolean;      /* Boolean value type. */             typedef   uns

关于宏的 ## 与 #

[c.c++]宏中"#"和"##"的用法(zz) 宏中"#"和"##"的用法一.一般用法我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.用法: #include<cstdio> #include<climits> using namespace std; #define STR(s) #s #define CONS(a,b) int(a##e##b) int main() { print

C++ &quot;#&quot;的作用和用法

本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/48879093 1 #和##的作用和用法 C/C++ 的宏中,#的功能是将其后面的宏参数进行字符串化操作,简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号.##连接符号由两个井号组成,其功能是在带参数的宏定义中将两个子串联接起来,从而形成一个新的子串.但它不可以是第一个或者最后一个子串. #include <iostrea

#和##在宏定义中使用问题

转自:http://www.linuxidc.com/Linux/2014-06/102925.htm 有一道经典的C语言问题,关于宏定义中#和##符号的使用和宏定义展开问题 程序如下: #include <stdio.h>#define f(a,b) a##b#define g(a)  #a#define h(a) g(a) int main(){        printf("%s\n", h(f(1,2)));        printf("%s\n&quo

c语言的宏的使用方法(转自他人)

C语言宏定义技巧 周四, 2008年 10月 09日 14:10 高级管理员 C/C++编程 - C语言基础   1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植. typedef  unsigned char      boolean;     /* Boolean value type. */typedef  unsigned