include
把文件当作文本的方式,拷贝到目标文件
不要在.h文件里面定义全局变量: 只在.h
文件里声明
,不然如果多个cpp
文件引入了,就会导致 重复命名
在.h
文件中,为了防止重复编译,通常加上pragma once
#define
宏替换
// 正确写法为宏参加上括号#define MUL(x, y) ((x) * (y))
#define MUL(x, y) (x * y)
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 double double *
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数据
double a, b;
printf("%ld\n", sizeof(a)); // double数据为8B
printf("%ld\n", sizeof(b)); // double数据为8B
}
// \表示连接符
#define BEGIN {int x = 10, y = 20;\
printf("%d\n",x);}
int main() {
BEGIN
return 0;
}
开关语句
#if ... #else ... #endif
#ifdef ... #else ... #endif
#ifndef ... #else ... #endif
利用宏仿写 assert
#define MY_Assert(exp) (void)(exp || (my_assert(#exp, __FILE__, __LINE__), 0))
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;
}