来自c程序设计 谭浩强

 程序编译流程

运行c程序的步骤

     在编好一个c程序后。怎样上机进行编译运行呢?一般要经过一下几个步骤:

      上机输入和编辑源程序。通过键盘和计算机输入程序,如果发现有错误,要及时改正。最后将源程序以文件形式存放子啊自己制指定的文件夹内(如果不特别指定,一般存放在用户当前目录下),文件用.c作为后缀,生成源程序文件,如f.c。

      对源程序文件进行编译,先用c编译系统提供的“预处理器”(又称“预处理程序”或“预编译器”)对程序中的预处理指令进行编译预处理。例如,对于#include<stido.h>指令来说,就是将stdio.h头文件的内容读进来,取代#include<stido.h>行。由于处理得到的信息与程序其他部分一起组成一个完整的,可以进行正式编译的源程序,然后有编译系统对该源程序进行编译。

     编译的作用是对源程序进行检查,判定它有无语法错误,如果有错编译过程编译器会发错错误提示,反复编译,反复提示,直到没有语法错误为止。这时编译程序自动把源程序转为二进制形式的目标程序(在visual c++ 中的后缀为.obj,如**.obj)。如果,不是特别指定,目标程序一般存放在当前用户的目录下,此时源程序文件尚未消失。

     在用编译系统对源程序进行编译时,自动包括了预编译,正式编译两个阶段,一起呵成,用户无需发出两次指令、

      进行连接处理。经过编译得到的二进制目标文件(.obj文件)还不能被计算机直接执行。前面提到,一个程序包含若干个源程序文件,而编译是以源程序文件为对象的,一次编译只能得到一个源程序文件的对应的目标文件(也成目标模块.obj文件)他只是程序的一部分,必须把所有编译后的目标模块连接装配起来,在于函数库连接成为一个整体,生成一个共计算机执行的目标程序,称之为可执行程序,在visual c++中 后缀为.exe,例如**.exe文件

编译流程图 三步走

单个源程序编译流程:源程序(.c文件)------->(:预编译,替换宏,读取头文件内容)-------->(:正式编译,生成二进制文件.obj文件) 

得到目标程序.obj文件

一个程序由若干源程序组成

 连接装配若干个.obj文件 + 函数库------->目标程序/可执行程序(.exe文件)

7.9 变量的存储方式和生存期(精)

总结:

从作用域来讲 变量分两种,全局变量,局部变量

变量的存储分两种,动态存储,静态存储。

变量的属性:类型 存储类型(动,静)

 从作用域的角度的角度分析,变量分为全局变量,局部变量!

 从变量的存在时间(即生存期)来观察,变量存储有两种方式,静态存储,动态存储方式!

   静态存储:程序运行期间由系统分配固定存储空间。

   动态存储:程序运行期间根据需要进行动态分配存储空间。

 从内存中供用户使用的存储空间情况。存储空间分为三部分

  程序区-----静态存储区-----动态存储区

数据分别存放在静态区和动态存储区中

全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存储空间,程序执行完毕释放。

在程序执行过程中它们占据固定的存储单元,而不是冬天的分配和释放。

在动态存储空间存放以下数据:

 函数形式参数,在调用函数时给形参分配存储空间。

 函数中定义没有关键字static声明的变量,即自动变量。

 函数调用时的现场现场保护和返回地址。

 对于以上数据,在函数开始调用时动态分配存储空间,函数结束释放空间,程序执行过程中这种分配和释放是动态的,如果在一个程序中两次调用同一个函数,而此函数中定义的局部变量,在两次调用时分配给这些局部变量的内存地址可能不同!

在c语言中每个变量和函数都有两个属性:数据类型,数据存储类型。

数据类型:double ,int之类的

数据存储类型(静态存储,动态存储)

存储类型分为四种:自动的(auto) 静态的(statis) 寄存器的(register) 外部的(extern)

C语言 遍历流程 变量生命周期的更多相关文章

  1. java 静态变量生命周期(类生命周期)

    Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 销毁:类被卸载时,静态变量被销毁,并释放 ...

  2. 探讨C++ 变量生命周期、栈分配方式、类内存布局、Debug和Release程序的区别

    探讨C++ 变量生命周期.栈分配方式.类内存布局.Debug和Release程序的区别(一) 今天看博客园的文章,发现博问栏目中有一个网友的问题挺有趣的,就点进去看了下,标题是“C++生存期问题”,给 ...

  3. java 静态变量生命周期(类生命周期)(转)

    Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 销毁:类被卸载时,静态变量被销毁,并释放 ...

  4. 一个BPMN流程示例带你认识项目中流程的生命周期

    摘要:本文详细说明了在工作流Activiti框架中的BPMN流程定义整个运行的生命周期. 本文分享自华为云社区<本文详细说明了在工作流Activiti框架中的BPMN流程定义整个运行的生命周期& ...

  5. Docker安装,基本概念,执行流程,生命周期简介

    Docker基本概念 在使用Docker前,首先要先知道Docker中这几个常用的概念: 镜像:镜像是文件,只读的,提供了运行完整软硬件应用程序的集装箱. 容器:是镜像的实例,由Docker负责创建, ...

  6. C语言-存储类&作用域&生命周期&链接属性

    1.概念解析(1)存储类 a.存储类就是存储类型,也就是描述C语言变量在何种地方存储. b.内存有多种管理办法:栈.堆.数据段.bss段..text段......一个变量的存储类属性就是描述这个变量存 ...

  7. Servlet执行流程和生命周期【慕课网搬】

    Servlet执行流程(GET方式为例) 首先用户客户端浏览器发出Get方式(点击超链接方式)向浏览器发出请求. 服务器接收到客户端点击超链接,接收到GET请求之后,服务器到WEB.xml中<s ...

  8. Servlet执行流程和生命周期

    Servlet执行流程 Get方式请求HelloServlet ---> <a href="servlet/HelloServlet"> ↓ 服务器在配置文档中查 ...

  9. vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期- -03

    目录 Vue-Cli 项目环境搭建 与 python 基础环境对比 环境搭建 创建启动 vue 项目 命令创建项目(步骤小多) 启动 vue 项目(命令行方式) 启动 vue 项目(pycharm 方 ...

随机推荐

  1. 团队作业week16

    0.新成员如何管理和使用这个工程? 对于后端而言,因为我们也是初次接触Django,因此从我们学习到程序编写过程中用到的各种知识都有学习笔记,比如Django的详细使用,Django数据库的使用.跨域 ...

  2. 解决Windows版Git出现templates not found的问题

    环境: Win10 x64 Git windows客户端(下载自 https://git-scm.com/) SourceTree 1.9.6.1(使用系统安装的Git,而非SourceTree内嵌的 ...

  3. HTML5的Audio标签打造WEB音频播放器

    目前,WEB页面上没有标准的方式来播放音频文件,大多数的音频文件是使用插件来播放,而众多浏览器都使用了不同的插件.而HTML5的到来,给我们提供了一个标准的方式来播放WEB中的音频文件,用户不再为浏览 ...

  4. Nginx笔记

    基础篇 关于Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.最早由俄罗斯的程序设计师Igor Sysoev所开发,并在一个BSD-like ...

  5. Web API系列(三)统一异常处理

    前面讲了webapi的安全验证和参数安全,不清楚的朋友,可以看看前面的文章,<Web API系列(二)接口安全和参数校验>,本文主要介绍Web API异常结果的处理.作为内部或者是对外提供 ...

  6. 旧版本APP被开发人员下架,新版本重新上传依然显示被下架

    新接了一个项目,这个项目在苹果商城上面的版本已经被原来另外一家公司的开发人员下架.我们重新设计.开发.上传,申请加急审核,终于完成手动发布.但是发布成功后,新版本提示:被开发人员下架.以前虽然迭代开发 ...

  7. MySql简易配置

    选择standard configuration ,然后next Service Name :服务名字 Launch the MySQL Server automatically:是否开机启动mysq ...

  8. Linux软件包管理

    Linux软件包管理 Linux软件包管理主要有2类:是二进制包管理.源码包管理 二进制包管理 主要有RPM和YUM两种 RPM包管理 安装 --ivh:-v ,-vv,-vvv显示的安装信息依次详细 ...

  9. nodejs学习笔记一

    一.node版本的更新命令 node有一个模块叫n,是专门用来管理node.js的版本的. 首先安装n模块: npm install -g n 第二步: 升级node.js到最新稳定版 n stabl ...

  10. jquery load 和 iframe 比较

    如果要加载的东西比较简单,里面的没有复杂的数据和逻辑,可以使用load.如果要加载的页面自身有复杂的逻辑.操作,还是建议使用ifame,因为iframe里面可以引入自身的js和样式,而load引入的东 ...