我遇到了一个问题,我正在添加一些包含
#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和stdio上的.h时,它说它无法找到它们,但它可以在unordered_map上找到它。跆拳道?
答案 0 :(得分:1)
一些标准库头被命名为例如“string”,“vector”等。你会在include目录中找到文件“unordered_map”,但你找不到文件“mysql”,只有“mysql.h”。
答案 1 :(得分:1)
从C的年龄开始,大多数标头的扩展名通常为.h
,并且它们直接对应于系统中的文件。在C ++中,标准明确指定某些库组件具有不包括任何扩展名的include指令,例如<unordered_map>
。这些库包括甚至不需要与文件对应,只是它们在包含时提供所需的接口。相比之下,mysql.h
和stdio.h
以及必须包含在确切名称中的真实文件。
在stdio.h
的情况下,C ++库定义了一个包含<cstdio>
,其中包含C stdio.h
的所有功能,但将它们放在std
命名空间而不是全局(这是C)中唯一的选择。
答案 2 :(得分:0)
文件扩展名不是可选的!你可以说
的原因#include <unordered_map>
而不是
#include <unordered_map.h>
是因为该文件实际上被称为“unordered_map”,没有扩展名。
C ++确实有cstdio
标题封装了C stdio.h
,所以你可以包含它;但至于MySql.h
,我不知道他们是否会发布这样的替代品。
答案 3 :(得分:0)
C ++省略了系统头文件中的“.h”,以区别于C头文件。标题为“标准C库的C ++标题”的部分下的详细here