C++笔记:windows版g++编译器MinGW与引入自定义头文件的相关问题

it2022-05-05  140

文章目录

自定义头文件与自定义源文件在同一目录下自定义头文件与自定义源文件在不同目录下

对于C++新手来说,直接上来就使用Visual Studio以及DEV C++等相关集成开发环境,让新手经常忽略学习语法的细节以及基本的知识点,而被集成开发环境相关界面的学习以及与源文件和头文件放一起的相关工程文件搞得晕头转向。所以对于编程新手来说,MinGW 是正合适的编译器,至少黑色的命令提示符界面很有编程的气氛,感觉很酷。在刚开始学 C语言 时,一般情况下所有代码都写在一个文件中,只要输入几个简单的命令,就能用 MinGW 编译成可执行文件。虽然 VS2013 等编译器,只要点击下鼠标就可以完成编译,但它会自动生成一大堆工程文件,让初学者摸不着头脑。而 MinGW 则只会生成一个可执行文件。 如果对 MinGW 和 VS2013 等编译器进行一下形容,那么 MinGW 是手动的,而 VS2013 等编译器则是自动的,很多底层配置操作已经帮你做好。因此 MinGW 的编译过程更加直观容易理解,也比较适合C/C++语言学习。

此篇博文就是教小白怎么仅仅利用源文件(.cpp)和头文件(.h)用g++在纯DOS下编程(默认读者已经下载安装好MinGW,配置好系统环境变量)

自定义头文件与自定义源文件在同一目录下

假设我在目录C:\Users\骄阳似我心\Desktop\C++测试\include_test下创建了3个文件,读者可在其它目录作测试。

三个文件内容如下:

fun.cpp

#include<stdio.h> #include"fun.h"//""就是编译器先在当前目录寻找fun.h头文件,找不到再到系统目录或相关目录寻找,<>直接到系统目录或相关目录寻找 int num=5; void func(){ printf("func in fun.c"); }

在fun.cpp定义了待会会被main.cpp源文件所引用的全局变量num和函数func()。 既然fun.cpp的变量和函数需要被另外的源文件所引用,所以需要为其编写一个头文件,C++头文件就是存放变量和函数的声明,而相关定义则存放在.cpp源文件,还有就是源文件中要包含自己的头文件,就比如#include"fun.h" 这一语句,目的就是让编译器检查定义和声明的一致性。

fun.h

#ifndef FUN_H//定义一个宏,防止多次包含一个文件 #define FUN_H void func(); extern int num; #endif

注意自己写的头文件,用"" 而不用<> ,<>为调用标准头文件库的用法,还有,头文件对相关全局变量申明需要带extern限定符,否则编译无法通过,

main.cpp

#include<stdio.h> #include"fun.h"//在当前目录寻找fun.h头文件 int main(){ func(); printf("\n");//换行 printf("%d",num); return 0; }

然后命令行输入: cd C:\Users\骄阳似我心\Desktop\C++测试\include_test进入三个文件所在目录,运行命令:

g++ main.cpp -o main.exe -include fun.h fun.cpp

g++参数含义-o制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听-include相当于“#include” 包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以 用它设定,功能就相当于在代码中使用#include

虽然在main.cpp里写了#include"fun.h" 但是g++还是需要加上该参数,后面是main.cpp需要include的头文件名与源文件名,而且两个不能少,否则编译报错,但是在VS等集成开发环境中自动帮你做好了,直接编译就可通过,但是我们直接使用DOS编程,在源文件内不但要写#include “fun.h”,而且g++编译时,还需要显式再指定头文件路径一次。

然后,还是出现.exe可执行文件 dos下,在该目录下直接输入命令:main.exe 运行效果: 成功将fun.cpp内的全局变量num和函数func()引入到main.cpp中输出

自定义头文件与自定义源文件在不同目录下

通常情况下,在一个大项目中,为了方便管理,需要将C++源文件和头文件进行分离。 还是在目录: C:\Users\骄阳似我心\Desktop\C++测试\include_test下新建一个文件夹headers,将fun.h头文件移到该文件夹下,如图:

fun.h文件内不需要改,此时我们需要稍微修改一下fun.cpp和main.cpp文件

fun.cpp

#include<stdio.h> #include"headers\fun.h" int num=5; void func(){ printf("func in fun.c"); }

main.cpp

#include<stdio.h> #include"headers\fun.h" int main(){ func(); printf("\n");//换行 printf("%d",num); return 0; }

就是改一下fun.h文件的相对路径,此处必须改,虽然,g++编译时-include参数也要指定相对参数,但如果此处不改,会出现一下错误: 打开DOS命令行,输入命令: cd C:\Users\骄阳似我心\Desktop\C++测试\include_test g++编译命令必须要进入需要被编译为.exe文件的源文件(main.cpp)所在目录 接着输入命令: g++ main.cpp -o main.exe -include headers/fun.h fun.cpp 生成.exe文件 Dos下接着输入命令: main.exe 输出显示


最新回复(0)