编译模式
c++程序中通常包含.cpp .h文件,前者为C++的源文件,里边都是C++的源代码,后者为C++的头文件,当然也是C++的源代码
C++语言支持分别编译,就是说一个程序的素有的内容可以分成不同地方分别放在不同的cpp文件内,cpp文件内的东西都是相对独立的,编译时不需要同其他文件相互交互,只需要编译成目标文件后再与其他目标的文件进行链接即可
比如a.app中定义了一个全局函数,而b中想要调用这个函数,即使a、b不知道对方的存在,但是可以分别对他们进行编译,编译目标文件后再进行链接
具体实现方式
b.cpp调用void test(){}函数前,需要先声明void test()这个函数,因为编译器在编译b.cpp时将生产一个富豪榜,函数是找=不到定义的符号,就会被存在这个表中,再进行链接的时候编译器就会在别的目标文件中去寻找这个符号的定义,一旦找到了程序即可正常生成
定义:将一个符号完完整整的描述出来,比如他是变量还是函数,返回什么类型等待,定义要安装C++语法完整的定义一个符号
声明:声明这个符号的存在,告诉编译器这个符号是在其他文件中定义的,我这边先预先用上,你链接的时候再去找他是怎么样的变量函数和返回类型,声明只需要写出这个符号的原型
头文件
在python的库中是把函数写在了一个文件里边,只要程序员用的时候去调用即可,这边也不可能把一堆函数写在一个文件里,等用的时候在复制到源代码中
于是乎头文件出现了,内容和cpp是一样的都是源代码,但是头文件是不能被编译的,把所有的函数声明全部丢在一个头文件中,当一个cpp文件需要他们的时候,就可以通过一个宏命令#include包含进这个cpp文件中,从而把他们的内容合并到了cpp文件内,当cpp文件被编译的董事会这些被包含的h文件就发挥作用了
定义一个cpp文件
//math.cpp
double f1() {
//do something here....
return;
}
double f2(double a) {
//do something here...
return a * a;
}
头文件中声明
// math.h
double f1();
double f2(double);
再另外个main.cpp内,调用函数只需要把头文件包含即可
// main.cpp
#include "math.h"
main() {
int number1 = f1();
int number2 = f2(number1);
}
include
#include会将后面的文件内容包含到当前的文件中来,本身是没有任何其他作用的,所有是把每一个它出现的地方替换成它后面所以写的那个文件的内容
main.cpp中的#include "math.h"在编译时候就会替换math.h文件,最终效果如下
// main.cpp
double f1();
double f2(double);
main() {
int number1 = f1();
int number2 = f2(number1);
}
联系邮箱:yang_s1r@163.com
博客园地址:https://www.cnblogs.com/Yang34/