#……预处理指令
文章目录
#include/#import
应该说是最基础的预处理指令了。
在文档的开头写 #include <...>
是从系统库内调用文档。
#include "..."
是优先从当前位置查询文档,如果查询不到到系统库内查询文档。
#include <.../...>
是在系统库内的文件夹 ...
内查询文档 ...
。#include ".../..."
同理。
#import
和 #include
的用法基本一样,一般用于压代码长度。
#endif
结束 #if/#ifndef/#ifdef/#elif/#else
的范围。
#pragma
#pragma
是系统库指令。
#pragma once
可以保证头文件只编译一次。
#pragma GCC optimize(3)
是让文件开启
O
3
O3
O3 优化,#pragma GCC optimize(2)
同理。
#define/#undef
#define ...
是定义 ...
。一般用于定义头文件。
#define A B
代表只要程序中遇到了
A
A
A 就替换成
B
B
B。
#define
命令是不能重复使用的。如果有 #define A B
然后 #define A C
会出错。
#undef A
代表删除
A
A
A 的 #define
宏定义。如果不存在就忽略这条指令。
#if/#elif/#else
类似于C++中的 if/else if/else
。只不过是编译器的命令而已。
最后一定要 #endif
。
#if 1
puts("a");
#elif 1
puts("b");
#else
puts("c");
// 输出a
#endif
#program
见过,但是不会用
#define的一些特殊用法
#define A(x) cout<<x
这样调用 A(x)
的时候会输出
x
x
x。
#define A(x)\ cout<<x
编译器会自动转化为 #define A(x) cout<<x
#define A(x) A(x)
会出错。
#define A(x)
#undef A
可以成功。
#define A(x,y) cout<<x<<' ' <<y
可以成功。
#define A(x, y) cout<<x<<' '<<y
会失败。
a##b
将
a
a
a 和
b
b
b 合并,可以嵌套。
#include <bits/stdc++.h>
#define A(a,b) a##b
#define B(a,b) a##e##b
using namespace std;
signed main() {
cout << A(3, 4) << '\n'; // 将3和4合并,输出34
cout << B(3, 4) << '\n'; // 将3和e和4合并 --> 3e4 --> 30000
}
#a
将
a
a
a 转换成字符串。
#include <bits/stdc++.h>
#define A(a) #a
using namespace std;
signed main() {
cout << A(3) << '\n'; // 是字符串的3
}
#ifndef/#ifdef
#ifndef X
当
X
X
X 没有出现的时候编译到 #endif
。
#ifdef X
正好相反。
一般用于头文件。
#include_next
尽量别用。引用下一个文件。