定义宏 (define macro)
> 宏是一种抽象 (Abstraction), 它根据一系列预定义的规则替换一定的文本模式.
>
> 解释器或编译器在遇到宏时会自动进行这一模式替换. 对于编译语言, 宏展开在编译时发生, 进行宏展开的工具常被称为宏展开器.
#define 宏名(记号) 内容
定义和使用
#define MaxSize 50
char a[MaxSize];
printf("%llu", sizeof (a));
纯文本替换
#define pint int*
pint a, b; // a是int类型指针变量, b是int类型变量
// 等价于 int *a, b;
含参数的宏
#define Mul(x) x*x
int a = Mul(3); // a = 9
又比如:
#define string(i) "param: "#i""
char b[20] = string(Hello);
puts(b); // "param: Hello"
#define show_string(s) printf("I can print: "#s".")
show_string(123); // "I can print: 123."
#define Test(n) x##n
int Test(1) = 10;
x1 = 20;
printf("%d", x1); // 20
取消定义
#undef
#define string(i) "param: "#i""
char b[20] = string(Hello);
#undef string
// 取消已有定义 string
标准预定义宏
宏 | 描 述 |
---|---|
__DATE__ | 当前源文件的编译日期, 用 "mmm dd yyyy" 形式的字符串常量表示 |
__FILE__ | 当前源文件的名称, 用字符串常量表示 |
__LINE__ | 当前源文件中的行号, 用十进制整数常量表示, 它可以随#line指令改变 |
__TIME__ | 当前源文件的最新编译吋间,用 "hh:mm:ss" 形式的字符串常量表示 |
__STDC__ | 如果今前编泽器符合ISO标准, 那么该宏的值为1, 否则未定义 |
__STDC_VERSION__ | 如果当前编译器符合C89, 那么它被定义为199409L; 如果符合C99, 那么它被定义为199901L; 在其他情况下, 该宏为宋定义 |
__STDC_HOSTED__ | (C99)如果当前是宿主系统, 则该宏的值为1; 如果当前是独立系统, 则该宏的值为0 |
__cplusplus | 当编写C++程序时该标识符被定义 |
条件编译
根据一定条件进行 if 判断
#ifdef
与#ifndef
#ifdef PI // 判断是否定义了PI
#define M 0
#else // 如果没有, 则
#define M 1
#include <math.h>
#endif // 结束
#if
#define M 1
#if M == 1
#define N 1
#elif M == 2
#define N 0
#else
#define N (-1)
#endif
</math.h>
标签:__,定义,int,macro,源文件,define,string From: https://www.cnblogs.com/khrushchefox/p/17311361.html