这边主要还是回顾下编译的基础知识,主要有两种形式,一种是无头文件,通过提前声明函数方式,来关联多个文件;一种是通过头文件形式来联系多个文件。编译相关的基础概念可参见如下博客:
我终于把C++多文件编程理解透彻了_chen_z_p的博客-CSDN博客_c++多文件编程
C++命令行多文件编译(g++) - niokit - 博客园
C++如何进行多文件编程?(汇总版)
两种形式分别在win10 vs2019环境下进行了实现,第一种形式是无头文件,文件排列结构如下:
multiFiles_vs.cpp中的内容如下:
// multiFiles_vs.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include
int fun(int a,int b);
int main()
{
int a = 0;
int b = 0;
std::cin >> a >> b;
int c = fun(a,b);
std::cout << c << std::endl;
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
// 入门使用技巧:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
fun.cpp中的内容如下:
int add(int a, int b);
int sub(int a, int b);
int fun(int a, int b)
{
return(add(a, b) + sub(a, b));
}
add.cpp中的内容如下:
int add(int a, int b)
{
return(a + b);
}
sub.cpp中的内容如下:
int sub(int a, int b)
{
return(a - b);
}
运行结果如下:
第二种形式是有头文件,同样环境下工程结构如下:
main.cpp文件中的代码如下:
#include "fun.h"
#include
int main()
{
int a = 0;
int b = 0;
std::cin >> a >> b;
int c = fun(a, b);
std::cout << c << std::endl;
}
fun.h文件中的代码如下:
#pragma once
#ifndef FUN_H
#define FUN_H
int fun(int a, int b);
#endif
fun.cpp文件中的代码如下:
#include "add.h"
#include "sub.h"
int fun(int a, int b)
{
return(add(a, b) + sub(a, b));
}
add.h文件中的代码如下:
#pragma once
#ifndef ADD_H
#define ADD_H
int add(int a, int b);
#endif // !ADD_H
add.cpp文件中的代码如下:
int add(int a, int b)
{
return(a + b);
}
sub.h文件中的代码如下:
#pragma once
#ifndef SUB_H
#define SUB_H
int sub(int a, int b);
#endif
sub.cpp文件中的代码如下:
int sub(int a, int b)
{
return(a - b);
}
运行结果如下:
我们在ubuntu环境下通过g++来编译执行程序,先来查看下g++的版本
首先来编译第一种形式,即没有头文件的版本,尝试了两种方法,一种是直接通过g++编译、链接生成执行文件,一种是先编译,再链接,后者的好处是节省时间,比如只有add.cpp发生变化了,如果用前者方式,则还需要编译其余的cpp;后者的话,只需要把发生变化的cpp编译后,和其它目标文件链接即可。同时也发现,编译文件的前后顺序,以及链接过程中,链接的目标文件的前后顺序都不影响结果。
第二种形式的编译命令如下,可以看到并不需要.h文件的参与,同时先尝试了过程中,如果参与缺少一个cpp文件,会出现如下的报错。
第二种形式下,依然可以先编译,在进行目标的链接,生成可运行文件
注:1. 也可以使用QTCreator来做集成开发环境(IDE),配置方法见如下博客链接:
《利用QTCreator编写C++程序》(Helloworld)_白鱼儿的博客-CSDN博客
编写上面功能程序,运行后效果如下:
也可以进行debug
2. vscode开发环境配置方法可参考如下博客:
Ubuntu下安装并配置VS Code编译C++ - tongqingliu - 博客园
将 VSCode 打造成 OpenCV 的 IDE(C++,window10 1803)_zhaiax672的博客-CSDN博客
VScode搭建OpenCV环境 - KenSporger - 博客园
3.codeblocks开发环境配置方法可参考如下博客:
CodeBlocks下载与安装教程_杨松赞的博客-CSDN博客
code::blocks16.01配置opencv3.1.0 - 简书
由于用QT做过实际的项目,比较熟悉,所以后面博主主要还是使用QT开发环境