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小时内删除。
发表评论