2 hchchc6016 hchchc6016 于 2016.03.06 23:49 提问

源程序是不是多个源文件组成的obj?

源程序是什么?这段话说函数的本质是全局的,那么多个源文件不是就可以通用了吗,为什么还分为能否被调用

7个回答

w1eix1iao
w1eix1iao   2016.03.26 16:19
已采纳

源程序就是整一个程序。指的是代码文件,具体来说就是.cpp和.h文件。这些文件之间的关系可以很简单(比如其中一个文件包含了其他文件),他们的关系也可以很复杂(自己想象),怎么来描述文件之间的关系呢?有个东西叫做Makefile,用于描述这种关系,如果是使用VS等集成开发环境,那么编译器自动帮你做了这个工作。
编译器首先会将每个文件生成.obj 文件(在linux下,叫做.o文件)。接着根据Makefile文件,将这些文件联系起来。
这样做的好处是,如果你修改了其中一个文件,那么只要再生成一份.obj文件,其他.obj都不用修改,再根据Makefile,就能生成新的可执行文件。
PS:不用纠结Makefile文件怎么生成的,如果有兴趣的话可以学习。高手都是自己写的。。

caozhy
caozhy   Ds   Rxr 2016.03.07 00:04

源程序是.cpp .h文件,每个cpp编译得到obj
obj以及资源文件等用链接器链接得到exe dll
函数是全局的,但是编译器编译源代码要先得到声明,extern,然后才能编译,链接器再链接在一起。

WinsenJiansbomber
WinsenJiansbomber   2016.03.07 01:17

看你问题的描述,感觉要讲的东西挺多的。这样讲叫吧,源程序就是给人看的,OBJ是机器用的指令,但是还没有组织好,经过链接程序处理后就成了组织好的程序 exe 文件。

zuishikonghuan
zuishikonghuan   2016.03.07 07:57

不是,源程序是.c .cpp .h .hpp等,obj是源文件经过编译器编译后生成的“目标文件”,这时候源代码已经编译成二进制机器码了,把众多的obj和需要的lib库文件一起连接得到最终的结果,比如exe,dll,sys等。

oyljerry
oyljerry   Ds   Rxr 2016.03.07 10:21

源代码文件是c,cpp,h等文件,它们是你的程序语言写的文件,然后编译器会对这些文件进行编译,生成obj,o等目标文件,也就是中间文件,他们一般对应你的cpp,也就是每个cpp一般会生成一个obj,o等文件
然后编译器的链接器会做下一步动作,对这些obj,o文件进行处理,主要是地址重定位,库加载,然后生成最终的可执行文件,填充好各个字段的内容,代码段,数据段,栈,堆空间等。

hchchc6016
hchchc6016 下图的源程序是什么意思?
2 年多之前 回复
hchchc6016
hchchc6016 那源程序是什么呢?
2 年多之前 回复
hchchc6016
hchchc6016   2016.03.07 10:55

图片说明

lx624909677
lx624909677   Ds   Rxr 2016.03.07 16:07

一个源程序由多个源文件组成,那么在运行的时候,源文件和源程序是在同一个进程地址空间,调用源文件的函数肯定没问题,一个DLL他们里面有一个函数,想要使用的话,需要先吧这个DLL加载到内存中,这个是偶其他的应用程序就可以调用这个DLL中的函数,这种情况下,DLL中的函数是外部还是内部的?你的那个图片中的说法感觉不是很准确

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
linux程序设计——多个源文件的问题,makefile的语法(第九章)
第九章 开发工具 本章介绍一些linux系统中的程序开发工具,其中一些工具也可以在UNIX系统中使用.linux系统除提供开发人员必须的编译器和调试器外,还提供一组工具,其中每个都可以完成一件独立的任务,并且允许开发人员将它们创造性地组合在一起,而这种组合能力也是linux从UNIX的哲学体系中继承而来的. 9.1 多个源文件带来的问题 在编写小程序时,许多人都会在编辑完源文件后重新编译所有
JNI在编译时的源文件和生成文件的层次结构详解
Android.mk文件的配置介绍 源文件和生成文件的层次结构 结合程序的具体介绍 Android.mk文件的相关配置简介之前如果你对JNI还不是很了解,建议你去看一下我之前写的两篇有关JNI的博客,脑补一下JNI。在这里我当你是了解的。主要围绕生成.so文件时的相关文件层次结构来介绍,当你把自己的程序的这方面的文件夹层次结构分析清楚了之后,你才会有进一步的提高。脚踏实地,一步一步来吧!LOCAL_
java源文件的基本结构
一、源文件基本语法(.java) [] //打包编译后源文件的class文件存放在package所指的目录下 [] //在需要使用不同的包中的类时,使用import语句来引入所需要的类 + //定义类 二、package打包编译、运行 打包编译方式: 例如:package com.cn; 对在该包下所有的类进行打包编译:javac -d . *.java ,其中*指所有的类
linux 编译时多个源文件生成一个目标文件
obj-m := target.o   target-objs :=  src1.o src2.o src3.o
C语言源程序的结构特点(笔记)
源程序的结构特点    1.一个C语言源程序可以由一个或多个源文件组成。    2.每个源文件可由一个或多个函数组成。    3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。    4.源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。    5.每一个说明,每一个语句都必须以分号结尾。但
VC++6.0中如何编译运行多个源文件
简单介绍一下VC++6.0如何编译运行C语言程序
源程序的特点(语法、词法)
1.一个C语言源程序可以由一个或多个源文件组成。 2.每个源文件可由一个或多个函数组成。 ……………………初学者适宜!       
C语言程序设计学习总结
一个C语言源程序可以由一个或多个源文件组成。 每个源文件可由一个或多个函数组成。 一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。
makefile---多个源文件,多个可执行文件(C/C++)
makefile 作用:将多个源文件通过一个makefile文件进行编译生成多个可执行文件。 环境:Vmware Workstation;CentOS-6.4-x86_64 图解说明: 1、创建并编辑文件main1.c: #include int main() { printf("main1\n"); return 0; } 2、创建并编辑文件m
关于C语言多个源文件编译成一个程序
第一次用CSDN的博客,慕名而来,决定好好经营下自己的技术博客。今天看《C和指针》中第二章编程训练的第一题,就是关于C语言多个源文件编译成一个程序的问题。之前自己一直都不太搞得懂这个,不过之前写的程序都是简单的,一个源文件就能搞定的那种,所以也一直懒了没有去学怎么,心里隐隐的对学习心的东西感觉到恐惧。今天自己搬弄了一个下午,各种错误,要崩溃了。吃完饭,又继续投入到这其中当去。这次学聪明了,Google了下,然后学着对比着来修改自己的代码。这里就举自己写的一个很简单的范例来解说。题目是,一共有三个源文件,第一