MacOS - Clang使用bits/stdc++.h - 非官方(竞赛用) - 通用方法

前言

Windows和MacOS双用户,Windows上cpp打竞赛/刷题 时使用bits/stdc++.h确实方便,毕竟不是实际项目的开发。

但MacOS的默认clang不包含bits/stdc++.h头文件,检索、github多星仓库的方法都不通用,故写此文已记之。

并且每次mac更新了developer kit之后,之前手动添加的bits/stdc++.h头文件都会失效,需要重新添加。

原理

不论是编译过程中还是在IDE的语法检测过程中,(若无指定特殊参数)都是会去默认库文件路径下查找目标头文件。

而clang默认没有bits/stdc++.h这个头文件,所以没办法#include <bits/stdc++.h>

所以直接新建个这个文件,放到库文件目录下就好了。

方法

网上clang库文件的位置都是一个固定路径,不同版本的MacOS(如最近新出的MacOS26)路径也不同。

如何确定clang默认库文件的位置?两个方法吧

方法一:IDE中获取

如果你使用IDE(大概率),如VsCode,直接随便创建个cpp文件,如:

cpp 复制代码
#include <iostream>

然后鼠标在iostreamCommand+单击鼠标左键就好。

这样VsCode就会打开iostream这个文件,这个文件所在路径就是clang库文件的默认路径。(如:/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/

方法二:使用clang命令

MacOS上打开终端,输入命令clang -E -x c++ - -v < /dev/null,可以看到输出中包含如下内容:

复制代码
#include "..." search starts here:
#include <...> search starts here:
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1
 /Library/Developer/CommandLineTools/usr/lib/clang/17/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
 /Library/Developer/CommandLineTools/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/SubFrameworks (framework directory)
End of search list.

看到没,#include <...> search starts here:,也就是说#include <xxx>的时候是从这些路径下开始搜索头文件的。

随便选一个(如第一个的/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/即可)。

最后的头文件添加

在上一步找到的库文件默认路径下新建文件夹bits,并将stdc++.h放入这个文件夹下就好了。

至于stdc++.h这个文件怎么来?可以在Windows上复制(maybe),也可以使用Github上的这个

End

The Real End, Thanks! 同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关推荐
枣伊吕波2 小时前
五十三、bean的管理-bean的获取、bean的作用域、第三方bean
java·开发语言
丁浩6662 小时前
Python---14.Python数据存储EXCEl和MySQL
开发语言·python
测试工程师成长之路2 小时前
Mac中XXX将对您的电脑造成伤害, 您应该将它移到废纸篓
macos
啦工作呢2 小时前
Sass:CSS 预处理器
开发语言·后端·rust
豆豆·丁2 小时前
kettle 执行java脚本生成SQL
java·开发语言·数据库
吹晚风吧2 小时前
线程安全之《Sychronized的八锁案例》
java·开发语言··sychronized
超级大只老咪3 小时前
编程竞赛高频考点
java·c语言·开发语言·c++·python
Learning_foolish3 小时前
Sychronized和ReentrantLock的区别
java·开发语言
Jyywww1213 小时前
uniapp中pinia(setup语法)使用流程
开发语言·javascript·uni-app