#define的用法
#define(宏定义),C语言中预处理命令一种。在预处理过程中进行简单字符串替换,不做正确性检查。
-
define字面量定义。
#define NUM (10) #define NUM2 (NUM+NUM)
可以使用 const 常量替代。
-
带参宏
#define PRINTINT(x) printf("%d\n", x);
这不是函数!在编译前会有预处理程序进行只是简单的字符串替换。
可以使用 inline 替换。 -
类型定义
#define LL long long
可以用typedef,using 替换。
-
宏的单行定义(##,#@,#的用法)
##x --> x
#@x --> ‘x’ (Microsoft Specific)
#x --> “x”举个例子:
/// @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; }
输出结果为:
2 2 22 97 66
-
define的多行定义
当define宏定义不能用一行写完时,在尾部加上\,可以继续在下一行定义。#define PRINT_HELLO printf("h \ 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; }
输出结果为:
h e llo 1 2 3 4 5 6 7 8 9 10
-
条件编译,在跨平台和系统的软件中,使用define可以实现条件编译。
#ifdef WINDOWS //...windows code #endif #ifdef LINUX //...linux code #endif
-
防止头文件被重复包含
#ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ //...声明语句 #endif
可以使用pragma once替换。
可以参考:https://blog.csdn.net/LU_ZHAO/article/details/104221956 -
定义宏和取消宏
#define LU_ZHAO //...code #undef LU_ZHAO
-
ANSI标准中说明了五个预定义的宏名:
__ LINE __:程序的当前行数
__ FILE __ :程序的名称
__ DATE __ :宏指令包含程序编译的时间。时间用字符串表示,其形式为:分:秒
__ TIME __ :源文件被翻译到代码时的日期,形式为月/日/年的字符串串
__ STDC __:如果__STDC__已经定义,编译器将仅接受不包含任何非标准扩展的标准C/C++代码。如果实现是标准的,则宏__STDC__含有十进制常量1。如果它含有任何其它数,则实现是非标准的。 -
__ VA_ARGS __
用来接受不定数量的参数。
举个例子:#define BUFFER_SIZE (2048) char buffer[BUFFER_SIZE]; #define SPRINT(...) sprintf(buffer, __VA_ARGS__) int main() { SPRINT("zhaolu"); printf("%s", buffer); return 0; }
当__VA_ARGS__宏前面##时,可以省略参数输入。
举个例子:#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; }
上一篇: #define的用法
下一篇: define和typedef的区别