C++#define 的⽤法
#define (宏定义),C 语⾔中预处理命令⼀种。在预处理过程中进⾏简单字符串替换,不做正确性检查。
1. define字⾯量定义。
可以使⽤ const 常量替代。
2. 带参宏
这不是函数!在编译前会有预处理程序进⾏只是简单的字符串替换。
可以使⽤ inline 替换。
3. 类型定义
可以⽤typedef,using 替换。define的基本用法
4. 宏的单⾏定义(##,#@,#的⽤法)
##x --> x
#@x --> ‘x’ (Microsoft Specific)
#x --> “x”
举个例⼦:
输出结果为:
5. define的多⾏定义
当define宏定义不能⽤⼀⾏写完时,在尾部加上\,可以继续在下⼀⾏定义。#define  NUM (10)#define  NUM2 (NUM+NUM)1
2#define  PRINTINT(x) printf("%d\n", x);
1#define  LL long long
1/// @author zhaolu #define  PRINT(x) printf("%d %s %d\n", x, #x, v##x)#define  A(x) (#x[0]) #define  B(x) *#x int  main (){    int  v2 = 22;    PRINT (2);    printf ("%d\n", A (a4)); printf ("%d\n", B (B ));    return  0;}
1
2
3
4
5
6
7
8
9
10
11
12
132 2 229766
1
2
3#define  PRINT_HELLO printf("h \e\
1
2
输出结果为:
6. 条件编译,在跨平台和系统的软件中,使⽤define可以实现条件编译。
7. 防⽌头⽂件被重复包含
8. 定义宏和取消宏
9. ANSI标准中说明了五个预定义的宏名:
__ LINE __:程序的当前⾏数
__ FILE __ :程序的名称
__ DATE __ :宏指令包含程序编译的时间。时间⽤字符串表⽰,其形式为:分:秒
__ TIME __ :源⽂件被翻译到代码时的⽇期,形式为⽉/⽇/年的字符串串
__ STDC __:如果__STDC__已经定义,编译器将仅接受不包含任何⾮标准扩展的标准C/C++代码。如果实现是标准的,则宏__STDC__含有⼗进制常量1。如果它含有任何其它数,则实现是⾮标准的。
10. __ VA_ARGS __
⽤来接受不定数量的参数。
举个例⼦:e\    l\l\o\n")#define  PRINT_ONE_TO_TEN() for(int i = 1; i <= 10; ++i) {\    printf("%d ",i);\} int  main (){ PRINT_HELLO ;    PRINT_ONE_TO_TEN (); return  0;}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16h    e    llo 1 2 3 4 5 6 7 8 9 10
12#ifdef  WINDOWS //...windows code #endif #ifdef  LINUX //...linux code #endif
1
2
3
4
5
6#ifndef  __SOMEFILE_H__#define  __SOMEFILE_H__//...声明语句#endif
1
2
3
4#define  LU_ZHAO //...code #undef  LU_ZHAO
1
2
3#define  BUFFER_SIZE (2048)char  buffer [BUFFER_SIZE ];
1
2
当__VA_ARGS__宏前⾯##时,可以省略参数输⼊。举个例⼦:#define  SPRINT(...) sprintf(buffer, __VA_ARGS__)int  main (){    SPRINT ("zhaolu");    printf ("%s", buffer );    return  0;}
3
4
5
6
7
8
9
10#define  BUFFER_SIZE (2048)char  buffer [BUFFER_SIZE ];#define  SPRINT(format, ...) sprintf(buffer,format, ##__VA_ARGS__)int  main (){    SPRINT ("zhaolu");    printf ("%s", buffer );    return  0;}1
2
3
4
5
6
7
8
9
10

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。