C语言的预处理_数据

C语言的预处理_#define_02


C语言的预处理_#define_03

C语言的预处理_数据_04

​include​​ 把文件当作文本的方式,拷贝到目标文件

C语言的预处理_#define_05


不要在.h文件里面定义全局变量: 只在​​.h​​​文件里​​声明​​​,不然如果多个​​cpp​​​文件引入了,就会导致 ​​重复命名​

在​​.h​​​文件中,为了防止重复编译,通常加上​​pragma once​

C语言的预处理_#define_06


​#define​​宏替换

// 正确写法为宏参加上括号#define MUL(x, y) ((x) * (y))
#define

int main() {
int a = 3;
int b = 5;
// 宏替换为:a+4*b+6,并不是(a+4)*(b+6)
int c = MUL(a + 4, b + 6);
return 0;
}
#define

int main() {
// double *p, s;
double p, s;
printf("%ld\n", sizeof(p)); // 指针大小为4B
printf("%ld\n", sizeof(s)); // double数据为8B

// 对于double的宏替换到此为止
#undef

//定义两个double数据
double a, b;
printf("%ld\n", sizeof(a)); // double数据为8B
printf("%ld\n", sizeof(b)); // double数据为8B
}

C语言的预处理_数据_07

// \表示连接符
#define

int main() {
BEGIN
return 0;
}

开关语句
​​​#if ... #else ... #endif​

​#ifdef ... #else ... #endif​

​#ifndef ... #else ... #endif​

C语言的预处理_#endif_08


C语言的预处理_#define_09


利用宏仿写 ​​assert​

#define

void my_assert(const char* exp, const char* file, int line) {
printf("ERROR : %s\n", exp);
printf("FILE: %s\nLINE : %d\n", file, line);
exit(1);
}

void print_arr(int* arr, int n) {
MY_Assert(arr != nullptr);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}

int main() {
// int arr[] = { 1,2,3 };
print_arr(nullptr, 0);
return 0;
}