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

问题描述

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

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

解决方案

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

解决方案二:

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

解决方案三:

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

解决方案四:

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

解决方案五:

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

解决方案六:

解决方案七:

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

时间: 2024-12-09 22:00:33

c-源程序是不是多个源文件组成的obj?的相关文章

C++笔试题目大全(笔试宝典)(不断完善中)

1.new . delete . malloc . free 关系 delete 会调用对象的析构函数 , 和 new 对应 free 只会释放内存, new 调用构造函数. malloc 与 free 是 C++/C 语言的标准库函数, new/delete 是 C++ 的运算符.它们都可用于申请动态内存和释放内存.对于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的要求.对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数.由于 malloc/free

C语言学习教程第五章-函数(9)

三.静态变量 静态变量的类型说明符是static. 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量. 对于自动变量,前面已经介绍它属于动态存储方式. 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式.由此看来, 一个变量可由static进行再说明,并改变其原有的存储方式. 1. 静态局部变量在局部变量的说明前再

深入理解C语言 static、extern与指针函数

 这篇文章主要介绍了C语言 static.extern与指针函数,有需要的朋友可以参考一下 1.exit(0)正常退出程序   exit(1)程序异常时退出程序   2.static(静态变量)修饰局部变量   在局部变量使用static修饰,会延长局部变量的存在期.但我们需要注意一下几点:   •虽然static修饰变量的生存期很长,但它始终是局部变量,不能在其他函数中使用 •static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函

C语言学习教程第九章-预处理(3)

文件包含 文件包含是C预处理程序的另一个重要功能.文件包含命令行的一般形式为: #include"文件名" 在前面我们已多次用此命令包含过库函数的头文件.例如: #include"stdio.h"#include"math.h" 文件包含命令的功能是把指定的文件插入该命令行位置取代该命令行, 从而把指定的文件和当前的源程序文件连成一个源文件.在程序设计中,文件包含是很有用的. 一个大的程序可以分为多个模块,由多个程序员分别编程. 有些公用的符号常

C语言学习教程第五章-函数(10)

内部函数和外部函数 函数一旦定义后就可被其它函数调用. 但当一个源程序由多个源文件组成时, 在一个源文件中定义的函数能否被其它源文件中的函数调用呢?为此,C语言又把函数分为两类: 一.内部函数 如果在一个源文件中定义的函数只能被本文件中的函数调用,而不能被同一源程序其它文件中的函数调用, 这种函数称为内部函 数.定义内部函数的一般形式是: static 类型说明符 函数名(形参表) 例如:static int f(int a,int b) 内部函数也称为静态函数.但此处静态static 的含义已

C语言学习教程第五章-函数(8)

变量的存储方式可分为"静态存储"和"动态存储"两种. 静态存储变量通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束.5.5.1节中介绍的全局变量即属于此类存储方式.动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放. 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即释放.如果一个函数被多次调用,则反复地分配. 释放形参变量的存储单元.从以上分析可知, 静态存储

c语言中static用法总结

一.c程序存储空间布局   C程序一直由下列部分组成: 正文段--CPU执行的机器指令部分:一个程序只有一个副本:只读,防止程序由于意外事故而修改自身指令: 初始化数据段(数据段)--在程序中所有赋了初值的全局变量,存放在这里. 非初始化数据段(bss段)--在程序中没有初始化的全局变量:内核将此段初始化为0. 栈--增长方向:自顶向下增长:自动变量以及每次函数调用时所需要保存的信息(返回地址:环境信息). 堆--动态存储分. |-----------||           ||-------

iOS中 static变量与全局、局部变量的区别 !

static变量与全局.局部变量的区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式. 这两者在存储方式上并无不同.这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的. 而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它.由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内

语言-static 函数定义在头文件中有什么作用

问题描述 static 函数定义在头文件中有什么作用 static 函数定义在头文件中有什么作用?学渣求教,static 不就是要限制作用域吗? 解决方案 是限定范围的,你的理解没有错.所以在 .h 中定义的 static 函数只能供本头文件中定义的函数使用 解决方案二: static表示静态类型.同时限定在模块内可见. 解决方案三: static用于声明静态变量,添加了该标识意味着这个变量的值在整个程序运行期间都存在的 解决方案四: static是静态变量.局部变量.其作用域是从定义点到ret