-
2021-05-19 12:48:26
c语言源文件经过编译后生成文件的后缀是什么
c语言源文件经过编译后生成文件的后缀是“.obj”。C语言源程序经过编译程序编译之后,生成一个后缀为“.obj”的文件,最后由称为“连接程序”的软件,把此“.obj”文件与各种库函数连接在一起,生成一个后缀“.exe”的可执行文件。
教程推荐:《c语言教程视频》
c语言源文件经过编译后,生成文件的后缀是“.obj”。
C语言源文件后缀名是“.c”,编译生成的文件后缀名是“.obj”,连接后可执行文件的后缀名是“.exe”。
C语言创建程序的步骤:编辑:就是创建和修改C程序的源代码-我们编写的程序称为源代码。
编译:就是将源代码转换为机器语言。编译器的输出结果成为目标代码,存放它们的文件称为目标文件。扩展名为.o或者.obj。(该部分编译是指汇编器编译汇编语言或者编译器编译高级语言)
链接:链接器将源代码由编译器产生的各种模块组合起来,再从C语言提供的程序库中添加必要的代码模块,将它们组成一个可执行的文件。在windows下扩展名为.exe,Unix下无扩展名。
执行:运行程序。
C语言源程序经过C语言编译程序编译之后,生成一个后缀为“.obj”的二进制文件(称为目标文件),最后还要由称为“连接程序”(Link)的软件,把此“.obj”文件与c语言提供的各种库函数连接在一起,生成一个后缀“.exe”的可执行文件。显然C语言不能立即执行。
相关介绍源程序:程序可以用高级语言或汇编语言编写,用高级语言或汇编语言编写的程序称为源程序。C语言源程序的扩展名为“.c”。源程序不能直接在计算机上执行,需要用“编译程序”将源程序编译为二进制形式的代码
目标程序:源程序经过“编译程序”编译所得到的二进制代码称为目标程序。目标程序的扩展名为“.obj”。
目标代码尽管已经是机器指令,但是还不能运行,因为目标程序还没有解决函数调用问题,需要将各个目标程序与库函数连接,才能形成完整的可执行程序。
可执行程序:目标程序与库函数连接,形成的完整的可在操作系统下独立执行的程序,称为可执行程序。可执行程序的扩展名为“.exe“。
更多编程相关知识,请访问:编程教学!!
c语言源文件经过编译后生成文件的后缀是什么?的教程已介绍完毕,更多请关注跳墙网其他文章教程!
c语言源文件经过编译后生成文件的后缀是什么相关教程
c语言程序中的基本功能模块为什么
c语言程序中的基本功能模块为“函数”。一个C语言程序可以由一个主函数和若干个函数构成;一个大的应用程序一般应该分为多个程序模块,每一个模块用来实现一个功能,而模块的功能是由函数完成的。 教程推荐:《c语言教程视频》 c语言程序中的基本功能模块为
C语言----汉诺塔问题----小白的试探与复盘
C语言----汉诺塔问题----小白的试探与复盘 问题: 汉诺塔问题是一个著名的问题,初始模型如图所示。其来源据说是在约19世纪末欧洲的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆自上而下、由小到大顺序串着64个圆盘构成的塔,游戏的目的是将最
04-关键字与标识符-C语言
04-关键字与标识符-C语言 C语言的字符集分为六类: 标识符 , 关键字 , 运算符 , 分隔符 , 常量 , 注释符 。本讲讲关键字与标识符,其余几个平时用的过程中就能理解。 在C语言中,系统已经占用了一些字符,这些字符有特殊含义,我们不能进行重复命名,这
05-数据类型与常量变量-C语言
05-数据类型与常量变量-C语言 之前介绍,C语言有丰富的数据类型,主要有四大类: 1.基本类型: int 整型、 float double 浮点型、 char 字符型、 enmu 枚举型;2.构造类型:数组类型、 struct 结构体、 union 共用体;3.指针类型;4.空类型: void 。 本讲主
Azure sql database 经过一段时间后就中断连接
Azure sql database 经过一段时间后就中断连接 在使用 Azure 的时候发现一个有趣的现象。 每天早上同事们开始开发工作的时候,不管是谁,第一次运行程序的时候都会出现数据库连接错误的提示。 2020-10-30 09:26:39.890 DEBUG 9398 --- [nio-8080-exec-2] com.
C语言一级指针(char *)易错模型分析
C语言一级指针(char *)易错模型分析 * 01char (字符串)做函数参数出错模型分析 建立一个思想:是主调函数分配内存,还是被调用函数分配内存; //不要相信,主调函数给你传的内存空间,你可以写。。。。。。一级指针你懂了。 但是二级指针,你就不一定懂。。
R语言ggplot2条形图/柱状图geom_bar()
R语言ggplot2条形图/柱状图geom_bar() 目录 1. 最基本条形图 2. 改变填充颜色与柱子宽度 3. 改变横纵坐标轴名称、字体和字号 4. 旋转坐标轴文字,或挪动其位置 5. 调整图片背景与页边距 6. 相关链接 假设名为dat的数据框(data.frame)包含两列,第一列是name,
R语言ggplot2分组条形图
R语言ggplot2分组条形图 目录 1. 基本分组条形图 2. 使柱子并排放置 3. 改变条形图配色 4. 使纵坐标呈现百分比 5. 删掉图例名称 假设我们有如下数据,其大致结构如图。 dat = data.frame(专业=rep(c('统计','计算机'),each = 2), 语言 = rep(c('R','Python'),
更多相关内容 -
Dev-C++ 提示源文件未编译,原因及解决办法
2022-06-18 08:14:57编译命令换行(可能有的同学和我一样喜欢换行写),导致编译通不过,如果选择编译运行,便会提示"源文件未编译"。如图 解决办法 这种写法不对,正确如下(两个命令间有一个空格): 其他 实测中文项目名,不会影响...原因
编译命令换行(可能有的同学和我一样喜欢换行写),导致编译通不过,如果选择编译运行,便会提示"源文件未编译"。如图
解决办法
这种写法不对,正确如下(两个命令间有一个空格):
其他
实测中文项目名,不会影响编译,但不推荐使用中文项目名(就像不推荐安装路径中文一样,有时候可能会玄学比如不兼容)。 -
C++源文件的编译流程简介
2020-10-12 20:42:46C++\C源文件,包含.c, .h, .cpp, .hpp等格式的文件,经过预处理、编译、汇编、链接后,形成可执行文件,也就是.exe文件。 预处理 预处理阶段主要有三个方面的内容: 1.宏定义; 2.文件包含; 3.条件编译。 最后产生...概述
C++\C源文件,包含.c, .h, .cpp, .hpp等格式的文件,经过预处理、编译、汇编、链接后,形成可执行文件,也就是.exe文件。
以一个简单项目MyProject为例,文件结构如下:
- MyProject
- MyClass.h
- MyClass.cpp
- main.cpp
//MyClass.h class MyClass { public: void MyFunction(); }
//MyClass.cpp #include "MyClass.h" #include <iostream> void MyClass::MyFunction() { std::cout<<"Call MyFunction()"; }
//main.h #include "MyClass.h" int main() { MyClass myclass; myclass.MyFunction(); return 0; }
其编译流程如下所示,一个cpp就是一个编译单元,h文件在链接时用了多次(故只能用于声明,可以重复声明,但不能重复定义):
一、预处理
预处理阶段主要进行预处理指令的处理,包括: 1.宏定义; 2.文件包含; 3.条件编译。最后产生 .i文件。通常预处理后的文件行数变多,体积膨胀,但还是具有良好的可读性。
- 宏定义
处理 #define ** ** ,又叫宏替换、宏代换,就是宏体替换宏名。
例:
#define PI 3.14 //把程序中全部的标识符PI换成3.14。
- 文件包含
处理 #include " " ,递归展开文件内容。编译时以包含处理以后的文件为编译单位,一个cpp文件就是一个编译单元,被包含的文件是源文件的一部分,编译以后只得到一个目标文件.obj。
例:
#include<iostream>//不带.h的为C++标准的头文件,带.h的是C标准的头文件。
#include只是文本包含,任何文本文件都可以包含,与后缀名无关。
如下图,将代码放到 .txt中也可以编译成功。
修改头文件后所有包含该文件的文件都要重新编译。- 条件编译
使用条件编译可以使目标程序变小,运行时间变短,就是说不满足条件的程序段是不会编译的。可以用于应付不同的编译环境。
例:
#ifdef MYCONDITION ...//run if have define MYCONDITION #else ... #endif
二、编译
编译是将源文件转换成汇编代码的过程,具体的步骤主要有:词法分析 -> 语法分析 -> 语义分析及相关的优化 -> 中间代码生成 -> 目标代码生成(汇编代码文件.s)。
代码的规范性和语法错误将在这里检查,检查无误后,生成汇编代码,也就是.s文件。具有汇编基础的同学还是能看一看的。三、汇编
在汇编阶段,汇编器将之前的汇编代码文件转成可重定位的目标程序,即二进制的目标代码 .o文件,使用文本编辑器打开将是一堆乱码,没有可读性。
目标代码通常有两个段:- 代码段:机器指令。
- 数据段:全局变量,静态变量。
四、链接
链接就是将目标文件、启动代码、库文件链接成可执行文件的过程,这个文件可被加载或拷贝到存储器执行。链接可分为静态链接和动态链接:
- 静态链接:将函数实现代码从静态链接库(.lib文件)中拷贝到最终的可执行程序中,程序包含所有的实现,自己就可以完整运行,缺点是体积较大。
- 动态链接:函数实现代码在动态链接库中(.dll文件),链接时只记录所依赖dll的入口信息,运行时需要找到相应的dll文件才能运行。
总结
通常,把整个编译过程分为编译(此“编译”含义更广)和链接两个阶段,前者将源代码编译为目标代码,后者将目标代码链接为可执行程序。
- MyProject
-
如何用VScode编译多个文件
2022-02-22 10:32:20如何用VScode编译多个文件 问题 本文基于Mac电脑操作,Windows系统应该也类似 默认情况下,在vscode中执行runCode,只会编译当前文件,如果引用了其他文件,则会报错,如下 Undefined symbols for architecture x86_...如何用VScode编译多个文件
问题
本文基于Mac电脑操作,Windows系统应该也类似
默认情况下,在vscode中执行runCode,只会编译当前文件,如果引用了其他文件,则会报错,如下
Undefined symbols for architecture x86_64: "WorkerManager::showManu()", referenced from: _main in main-7cf994.o
此时,如果使用g++命令手动编译依赖的文件,是可以解决问题的,但是过于麻烦,通过vscode提供的task.json,可以相对简单地实现自动编译多个依赖文件的问题
操作步骤
目录结构如下
生成默认的task.json
将入口文件(比如main.cpp)放到当前活动窗口就,点击以下顺序:终端>>配置默认生成任务,得到一个默认的task.json,默认的文件设置只编译当前文件,并且编译的结果放到当前目录。我们只需要修改json中的args元素即可,修改如下
"args": [ "-fdiagnostics-color=always", "-g", "${fileDirname}/*.cpp",//编译全部cpp文件 "-o", "${fileDirname}/out/${fileBasenameNoExtension}" //产出放到当前目录的out子目录下集中管理 ]
得到最终的task.json
{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "C/C++: clang++ 生成活动文件", "command": "/usr/bin/clang++", "args": [ "-fdiagnostics-color=always", "-g", "${fileDirname}/*.cpp", "-o", "${fileDirname}/out/${fileBasenameNoExtension}" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "detail": "编译器: /usr/bin/clang++" } ] }
编译执行
将主程序保持在当前页,使用⌘⇧B快捷键,或者点击终端>>运行生成任务,完成编译,然后去执行main的执行文件即可
-
VS工程目录下各文件的含义以及如何打开源文件进行编译
2020-08-11 19:18:40VS2017 文件—打开—文件夹—打开原代码所在文件夹—右侧有解决方案资源管理器—打开源文件 -
反编译Jar包生成源码文件
2018-08-22 21:55:301、打开一个或者多个*.class文件,XJad反编译后,重命名为*.java文件, 保存至当前文件夹,并在编辑器中打开查看; 2、打开一个文件夹,XJad将该文件夹下所有*.class文件进行反编译,并保存至该文件夹下, 依据包... -
C++源文件和头文件的多文件结构
2019-02-28 21:15:56可以把函数声明都写在a.h头文件里,当b.cpp源文件需要它们时,它们就可以通过“#include "a.h"”包含进b.cpp文件中,从而把它们的内容合并到b.cpp文件中去。 #include 说明:#include 是一个来自C语言的宏命令,它在... -
嵌入式系统/ARM技术中的Linux源文件的组织结构
2020-11-12 23:10:33内核源程序的文件按树形结构进行组织,Linux-2.4.x最上层会看到这样一些目录: (1)arch:arch子目录包括了所有和体系结构相关的核心代码。它的每一个子目录都代表一种被支持的体系结构,如ARMNOMMU/下就是... -
【编译原理之】Bison 源文件结构原理
2017-12-21 09:12:310x00 What is BISONBISON用于语法分析器的自动生成,这个工具可以在网上下载获得。 化点时间学习这个工具的用法,并用于SQL语言的分析,可以让我们把...BISON源文件的结构我们需要按照BISON的要求,书写BISON的源程序 -
总结python源文件编译、反编译、加密混淆
2019-11-19 14:16:222. 编译为 pyo 或者 opt-n.pyc 文件 3. 编译成 pyd 或 so 链接库 编译方法一 编译方法二 编译方法三:Nuitka 使用建议 二、打包 1. PyInstaller 2. 压缩成 pyz 三、反编译 1. pyc 、pyo 文件反编译 在线... -
Java源文件结构详解
2021-02-12 23:11:27表-1 Java源文件结构结构作用要求package语句声明类所在的包0或1个,必须放在文件开始import语句从特定的包引入类0或多个,必须放在所有类定义之前public classDefinition公共类定义部分0或1个classDefinit... -
C++: 多文件结构和预编译命令
2018-03-29 12:12:10C++程序的一般组织结构l 一个工程可以划分为多个源文件:n 类声明文件(.h文件)n 类实现文件(.cpp文件)n 类的使用文件(main()所在的.cpp文件)l 利用工程来组合各个文件。外部变量l 如果一个变量除了在定义它... -
如何编译含有多个文件的fortran程序包(Linux多文件编译)
2020-06-15 21:54:02这样的程序包往往关系复杂,但是编译起来却很简单:不需要按照文件的结构依次编译每个文件,只需要在shell中输入make即可全部编译完成。如果非常关心各个程序之间的相互关系,只需要打开Makefile查看即可。 关于Make -
JAVA源文件动态编译
2017-12-06 20:18:43(转载)JAVA动态编译--字节代码的操纵 ...这种开发模式背后的过程是:开发人员编写的是Java源代码文件(.java),IDE会负责调用Java的编译器把Java源代码编译成平台无关的字节代码(byte code),以类文 -
【三、深入浅出GCC编译器】一个源文件到可执行文件是如何生成的:GCC编译工具链及编译参数详解
2022-04-25 19:45:29GCC原名为GNU C语言编译器(GNU C Compiler),只能对C语言...本文将带你迈入GCC的大门,了解一个C源文件是如何在GCC编译工具链的加工下成为一个可执行性文件的,并详细讲解GCC编译参数以及可能会用到的其他知识。.. -
gcc编译多文件项目(包含静态库和动态库)
2021-03-27 20:13:33先看一下项目的文件结构 生成静态库和使用静态库 gcc -c libtest.c -I ./include/ //该命令可以生成libtest.o ar rcs libtest.a libtest.o //该命令可以生成libtest.a静态库 要使用静态库的时候直接把libtest.a加入... -
CMake使用详解二(多文件编译)
2019-06-02 09:38:08文章目录1 同一目录,多个源文件1.1 创建2个源文件1.2 编写CMakeLists.txt1.3 编译项目2 多个目录,多个源文件2.1 在不同的目录下新建源代码2.2 编写CMakeLists.txt2.2.1 根目录中的 CMakeLists2.2.2 子目录中的 ... -
cmake多文件、多文件夹编译
2020-04-02 12:05:33工程目录结构如下: manyFolderCompile3:工程的根目录。 bin:会生成的可执行文件的目录,需要把图片放到这个目录。在没有改动“main.cpp”文件中的读取图片的名字情况下,图片的名字只能是“123.jpeg”。 ... -
makefile编译多目录文件 自动生成编译目录
2020-12-17 15:32:31makefile编译目录文件 自动生成编译目录欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格... -
Java类动态加载(一)——java源文件动态编译为class文件
2014-10-30 11:35:01什么情况下会需要用java程序动态的编译java源文件,动态的加载java类文件呢?如果很少遇到这样的需求的兄弟们可能不会清楚动态的编译、动态的加载用在一个什么样的场景。下面我将我遇到的场景描述下。 Sdl说明: ... -
Android APK文件结构 完整打包编译的流程 APK安装过程 详解
2020-03-18 21:31:49Android 构建系统编译应用资源和源代码,然后将它们打包成可测试、部署、签署和分发的 APK。一般使用 Android Studio开发的时候使用Gradle构建工具包来自动执行和管理构建流程,同时也可以灵活地自定义构建配置。 ... -
使用javac编译java文件
2021-02-12 13:49:01源文件名.java 则编译后在当前目录下,编译器会生成包的文件目录层次结构,并且把class文件放入其中。 如果不用“.”,也可以指定目录。 用java命令执行的时候需要将包的信息全部带上,即用完整的加包名的形式执行。... -
C++版本使用CMakeLists.txt编译(同目录多个源文件)可执行文件
2020-07-11 11:47:22C++版本使用CMakeLists.txt编译(同目录多个源文件)可执行文件1.创建C++代码main.cpp、Function.h、Function.cpp2.创建CMakeLists.txt3.CMake编译4.运行程序 1.创建C++代码main.cpp、Function.h、Function.cpp ... -
JNI在编译时的源文件和生成文件的层次结构详解
2016-09-19 16:33:51源文件和生成文件的层次结构 结合程序的具体介绍 Android.mk文件的相关配置简介之前如果你对JNI还不是很了解,建议你去看一下我之前写的两篇有关JNI的博客,脑补一下JNI。在这里我当你是了解的。主要围绕生成.so文件... -
单独Java文件的通用快速编译方法
2021-02-27 11:15:29我们经常需要对单独Java文件进行编译。最简单的情况是我们Java源代码不依赖外部任何jar包,此时直接使用javac命令就可以编译成class文件;或者依赖少量的jar包,我们依然可以在命令行中带上-classpath参数和依赖jar... -
(三)CMake的多源文件编译
2019-01-20 18:04:24文件结构如下 . ├── CMakeLists.txt ├── main.cpp ├── multiple.cpp ├── operation.cpp └── operation.h 文件内容 multiple.cpp int mul(int a,int b) { return a*b; } operat... -
一个Java源程序经过编译后,得到的文件扩展名一定是.class。
2021-03-11 17:30:28( )是计算机中最重要的外存储器,它用来存放大量数据,由一个或者多个铝制或者玻璃制的碟片组成。 Fortunately, the accident didn't many people, for there was little traffic at that hour. (5.0分) 20.实行电算... -
C++——多文件结构和编译预处理命令
2018-08-11 12:00:33一、多文件结构 二、编译预处理 一、多文件结构 1、一个工程可以划分为多个源文件: 类声明文件(.h文件) 类实现文件(.cpp文件) 类的使用文件(main函数所在的.cpp文件) 2、利用工程来组合各个文件 //... -
GCC 同时编译多个 C/C++ 文件
2020-12-07 23:24:27将多个 C/C++ 源文件加工为汇编文件或者目标文件; 将多个 C/C++ 源文件或者预处理文件加工为汇编文件或者目标文件; 将多个 C/C++ 源文件、预处理文件或者汇编文件加工为目标文件; 同一项目中,不同的源文件、... -
Bootstrap 源码版文件结构
2018-03-03 22:17:04源码版文件结构源码版的Bootstrap提供了CSS、JavaScript的源文件,以及一份文档,还有使用 ImageOptim 工具压缩后的图片文件。源码版的所有文件,也是按逻辑进行分类存储。将下载的文件解压,你可以看到以下目录结构...