Refer to: Learn Cpp
直接上代码
三个文件源码如下:
add.h:
1 |
|
add.cpp:
1 | int add(int x, int y) |
main.cpp:
1 |
|
编译运行过程
常见问题
尖括号和双引号的区别
你可以看到 iostream
是使用尖括号进行引用的,而 add.h
是通过双引号进行引用,为什么呢?
这是因为 iostream
是编译器自带的头文件,尖括号的意思是告诉编译器到系统目录下查找这个头文件。而双引号则告诉编译器这个头文件是由我们自己提供的,这样编译器就会在当前文件夹下查找这个头文件,如果编译器在当前文件夹下找不到这个头文件,它就会查找编译器或 IDE 设置好的路径下是否包含该文件,还是找不到的话编译器就会查找系统目录。
规则是:使用尖括号包含编译器自带的头文件,使用双括号包含其他头文件。
为什么 iostream 没有一个 .h 后缀?
最直接的回答:因为 iostream.h
和 iostream
压根就不是同一个头文件!不过要解释开来就都是历史遗留问题了。
老版本的 C++ 使用 iostream.h
,后来 C++ 被 ANSI 委员会标准化后把 iostream.h
的所有方法都迁移到 std
命名空间里,但这样在此之前写的代码不就不能被正确编译了吗?于是他们想到了用 iostream
,这些新的头文件都被包含在 std
命名空间内,这样旧的代码就不必重写了。
规则是:如果一个库有不用 .h 后缀的版本存在,那就通过 std 命名空间访问它,但如果这个库没有不用 .h 后缀的版本,那你就得自己创建头部,同时使用 .h 版本。
引用其他路径的头文件
如下代码:
1 |
能不能把函数定义到一个头文件内
可以。但强烈建议不这么做,或者说你不应该这么做。
一些 mention
- Always include header guards.
- Do not declare variables in header files unless they are constants. Header files should generally only be used for declarations.
- Do not define functions in header files.
- Each header file should have a specific job, and be as independent as possible. For example, you might put all your declarations related to functionality A in A.h and all your declarations related to functionality B in B.h. That way if you only care about A later, you can just include A.h and not get any of the stuff related to B.
- Give your header files the same name as the source files they’re associated with (e.g. grades.h goes with grades.cpp).
- Try to minimize the number of other header files you #include in your header files. Only #include what is necessary. Do not #include .cpp files.