编辑器、编译器、文件、IDE等常见概念辨析
编辑器、编译器、文件、IDE等常见概念辨析
一、编辑器与编译器有什么区别?有什么好用的编辑器?
1)编辑器
编辑器的作用就是将我们在键盘上的敲击转换成写有代码的文件,这个文件被称为程序源文件,或者直接叫做源文件。
这个编辑器在形式上很像是一个记事本程序,可以在上面添加、删除、插入字母或者文字,并且可以将这些字母和文字保存到一个文件中。其实,记事本是可以作为C语言编辑器的,我们在记事本上编辑的字母和文字就是将要学习的C语言代码。这些代码保存到一个文件中,供下次编辑或者直接交给编译器去处理,这个文件就是源文件。
其实,只要能将键盘的输入转换成源文件的就可以称为编辑器。一般的编辑器也是可以编写C语言代码的,只不过,比起专业的C语言编辑器会显得难用和不舒服一点。
2)编译器
编译器的作用是将保存着我们所写代码的源文件,转换成一种称为目标文件的二进制文件。源文件是我们能看懂的,是给我们用的。而二进制文件是计算机能看懂的文件,是给计算机用的。计算机根据二进制文件中的内容决定该做什么事情,不该做什么事情。
在这个转换过程中,编译器先对源文件中的内容进行扫描,根据C语言的语法要求,逐个检查源文件中出现的每一个字母或者文字。
如果这些文字符合C语言的语法要求,那么它就根据这些字母和文字的含义将其转换成计算机可以识别的二进制代码,并将其按照一定的格式保存在二进制文件中。如果某些地方的字母或者文字不符合C语言的语法要求,那么编译器将报告所有不符合的地方,不再生成二进制文件,只有改正所有不符合语法要求的地方,让编译器重新对改正的源文件进行转化,才可以生成二进制文件。
编译器对源文件的转换过程在计算机中有个专业的名字,叫”编译”。编译器也因此得名,表示编译的工具。
3)10个常用的代码文本编辑器
Notepad++
Vim
GNU Emacs
Sublime Text
Atom
PSPad
Geany
Eclipse
jEdit
NetBeans
二、源代码文件、可执行文件、“xxx.sln”、项目文件、文本文件
1)源代码文件
是包含程序员使用的任何的编写语言编写成的代码;拓展名:“.c”或“.cpp”
2)可执行文件
是包含着组成可执行程序的完整的机器语言代码,在不同的操作系统环境下,呈现方式不同
3)sln文件
是在开发环境中使用的解决方案文件,将一个或多个项目的所有元素组织到单个的解决方案中
4)项目文件
项目project是一组代码的统称,其必须实现一个完整的功能,也可以是一个完整的程序,也可以是其中模块
5)文本文件
是一种典型的顺序文件,是指以ASCII码方式存储的文件
三、IDE与编辑器、编译器、调试器等有什么关系?举几个你常用的IDE
1)关系
集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。就是说IDE包含了编辑器,编译器,和调试器所有功能的工具
2)常用的IDE
Dev C++
Visual Studio Code
Code Blocks
四、在Visual Studio中,按一下ctrl+F5就可以“直接运行”.c或.cpp文件。原理是什么?中间经历了了什么步骤?实际上执行了什么命令?使用了g++、gcc这两个命令吗?
1)原理
程序通过了语法检查,编译生成可执行文件后,在编程的环境中运行该程序
2)步骤
源程序 -> 预编译 -> 编译 -> 汇编 -> 连接
3)命令
有执行g++、gcc这两个命令
五、g++、gcc这两个命令有啥区别
1)
对于 .c和.cpp文件,gcc分别当做c和cpp文件编译(c和cpp的语法强度是不一样的)
2)
对于 .c和.cpp文件,g++则统一当做cpp文件编译
3)
使用g++编译文件时,g++会自动链接标准库STL,而gcc不会自动链接STL
4)
gcc在编译C文件时,可使用的预定义宏是比较少的
5)
gcc在编译cpp文件时/g++在编译c文件和cpp文件时(这时候gcc和g++调用的都是cpp文件的编译器),会加入一些额外的宏,这些宏如下:
#define GXX_WEAK 1
#define __cplusplus 1
#define __DEPRECATED 1
#define GNUG 4
#define __EXCEPTIONS 1
#define private_extern extern
6)
在用gcc编译c++文件时,为了能够使用STL,需要加参数 –lstdc++ ,但这并不代表 gcc –lstdc++ 和 g++等价,它们的区别不仅仅是这个
主要参数
-g - turn on debugging (so GDB gives morefriendly output)
-Wall - turns on most warnings
-O or -O2 - turn on optimizations
-o - name of the output file
-c - output an object file (.o)
-I - specify an includedirectory
-L - specify a libdirectory
-l - link with librarylib.a
使用示例:g++ -ohelloworld -I/homes/me/randomplace/include helloworld.C