不能正确包含头文件

Cannot include header files correctly

本文关键字:文件 包含头 不能      更新时间:2023-10-16

我有一个问题,我添加一些包括

#include <stdio.h>
#include <unordered_map>
#include <mysql.h>

使用此命令进行编译,

g++ -Wl,-Bsymbolic-functions -rdynamic -L/usr/lib/mysql -lmysqlclient -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -DUNIV_LINUX -DUNIV_LINUX -I/usr/include/ -I/usr/include/c++/4.5/bits/ main.c -o program

当我删除MySQL和studio上的。h时,它说它找不到它们,但它可以在unordered_map上找到。Wtf ?

一些标准库头文件被命名为"string", "vector"等。你会发现文件"unordered_map"在你的包含目录,但你不会找到文件"mysql",只有"mysql.h"。

自C时代以来,大多数头文件都有一个扩展名,通常是.h,它们直接对应于系统中的文件。在c++中,标准明确指定某些库组件具有不包含任何扩展的include指令,例如<unordered_map>。这些库包含甚至不需要对应于文件,只需要在包含时提供所需的接口即可。相比之下,mysql.hstdio.h和真实的文件必须包含在确切的名称中。

stdio.h的情况下,c++库定义了一个包含<cstdio>,它包含了C的stdio.h的所有功能,但将它们放在std命名空间中,而不是全局的(这是C中唯一的选项)。

文件扩展名不可选!你可以说

的原因
#include <unordered_map>

代替

#include <unordered_map.h>

是因为文件实际上被称为"unordered_map",没有扩展名。

c++确实有cstdio头,它包装了C的stdio.h,所以你可以包括它;至于MySql.h,我不知道他们是否会有这样的替换品。

c++省略了系统头文件中的"。h"以区别于C头文件。在"标准C库的c++头文件"一节中详细介绍