Why C++,why?
2026-03-10 21:20:58
发布于:浙江
众所周知,C++ 中有<bits/stdc++.h>的头文件,一般要这样写:
#include<bits/stdc++.h>
但是,我发现也可以这样写:
#include<bits//stdc++.h> //这样也可以过编译,甚至运行
不过,这样不行:
#include<bits //过不了编译
难道双斜杠(//)不是注释的意思吗?为什么第二种和第三种不一样啊?有大佬能告诉我原因吗?


对了,能来个三连吗(点赞、关注、评论)?我在冲出道萌新,而且三连了我和你都能得罐头


全部评论 11
- 置顶
🔍 为什么 #include<bits//stdc++.h> 能工作?
. C/C++ 预处理器对路径的处理
在 #include 指令中,路径中的 // 会被文件系统或预处理器视为 单个 /(因为 POSIX 文件系统中 // 等价于 /,尽管语义略有不同,但多数系统会规范化路径)。
所以 bits//stdc++.h ≈ bits/stdc++.h
. GCC 的 #include 实现宽松
GCC 的预处理器在解析头文件路径时,对多余的 / 不敏感。
它会尝试将路径标准化,因此 a//b.h → a/b.h
✅ 实测:在 Linux/macOS/Windows (MinGW, WSL) 上,#include<bits//stdc++.h> 通常能成功包含 <bits/stdc++.h>2026-02-15 来自 浙江
4谢谢

2026-02-16 来自 福建
2
#include"bits/stdc++.h"也可以
2026-04-03 来自 浙江
2666
2026-06-14 来自 浙江
1C++还是太权威了
2026-06-14 来自 浙江
1
建议还是第一种写法,不然其它评测机可能就编译不了了
2026-03-10 来自 广东
1确实,但是我的意思是第二种很“神奇”

2026-03-12 来自 浙江
0
当路径字符串中出现空格时(如 bits //),预处理器会将空格后的内容(//)视为注释的开始,导致路径被截断为 bits。此时编译器尝试查找名为 bits 的文件(而非目录),但标准库中只有目录 bits/,因此报错 cannot open source file
。2026-02-15 来自 江西
1主要是我不报错

2026-02-15 来自 浙江
06
2026-02-15 来自 江西
1但是,我还是谢谢你

2026-02-15 来自 浙江
0
来个三连吧,来个三连吧,来个三连吧!!!
2026-02-14 来自 浙江
1来个三连吧,来个三连吧,来个三连吧!!!
2026-02-14 来自 浙江
1。
2026-06-12 来自 浙江
01
2026-06-12 来自 浙江
0???
2026-02-15 来自 江苏
0话说你这个打字是怎么搞的,不会是滥用标题吧
2026-02-14 来自 广东
0唐了,大字
2026-02-14 来自 广东
0猜对了
2026-02-15 来自 浙江
0对

2026-03-10 来自 浙江
0
我去第一次知道
2026-02-14 来自 广东
0



















































有帮助,赞一个