• C语言 遍历流程 变量生命周期


    来自c程序设计 谭浩强
    
    1 程序编译流程
    
    运行c程序的步骤
    
         在编好一个c程序后。怎样上机进行编译运行呢?一般要经过一下几个步骤:
    
         1 上机输入和编辑源程序。通过键盘和计算机输入程序,如果发现有错误,要及时改正。最后将源程序以文件形式存放子啊自己制指定的文件夹内(如果不特别指定,一般存放在用户当前目录下),文件用.c作为后缀,生成源程序文件,如f.c。
    
         2 对源程序文件进行编译,先用c编译系统提供的“预处理器”(又称“预处理程序”或“预编译器”)对程序中的预处理指令进行编译预处理。例如,对于#include<stido.h>指令来说,就是将stdio.h头文件的内容读进来,取代#include<stido.h>行。由于处理得到的信息与程序其他部分一起组成一个完整的,可以进行正式编译的源程序,然后有编译系统对该源程序进行编译。
    
         编译的作用是对源程序进行检查,判定它有无语法错误,如果有错编译过程编译器会发错错误提示,反复编译,反复提示,直到没有语法错误为止。这时编译程序自动把源程序转为二进制形式的目标程序(在visual c++ 中的后缀为.obj,如**.obj)。如果,不是特别指定,目标程序一般存放在当前用户的目录下,此时源程序文件尚未消失。
    
         在用编译系统对源程序进行编译时,自动包括了预编译,正式编译两个阶段,一起呵成,用户无需发出两次指令、
    
         3 进行连接处理。经过编译得到的二进制目标文件(.obj文件)还不能被计算机直接执行。前面提到,一个程序包含若干个源程序文件,而编译是以源程序文件为对象的,一次编译只能得到一个源程序文件的对应的目标文件(也成目标模块.obj文件)他只是程序的一部分,必须把所有编译后的目标模块连接装配起来,在于函数库连接成为一个整体,生成一个共计算机执行的目标程序,称之为可执行程序,在visual c++中 后缀为.exe,例如**.exe文件
    
     
    
    编译流程图 三步走
    
     
    
    单个源程序编译流程:源程序(.c文件)------->(1:预编译,替换宏,读取头文件内容)-------->(2:正式编译,生成二进制文件.obj文件) 
    
    得到目标程序.obj文件
    
    一个程序由若干源程序组成
    
    3 连接装配若干个.obj文件 + 函数库------->目标程序/可执行程序(.exe文件)
    
     
    
    7.9 变量的存储方式和生存期(精)
    
    总结:
    
    从作用域来讲 变量分两种,全局变量,局部变量
    
    变量的存储分两种,动态存储,静态存储。
    
    变量的属性:类型 存储类型(动,静)
    
     
    
    1 从作用域的角度的角度分析,变量分为全局变量,局部变量!
    
    2 从变量的存在时间(即生存期)来观察,变量存储有两种方式,静态存储,动态存储方式!
    
       静态存储:程序运行期间由系统分配固定存储空间。
    
       动态存储:程序运行期间根据需要进行动态分配存储空间。
    
    3 从内存中供用户使用的存储空间情况。存储空间分为三部分
    
      程序区-----静态存储区-----动态存储区
    
    数据分别存放在静态区和动态存储区中
    
    全局变量全部存放在静态存储区中,在程序开始执行时给全局变量分配存储空间,程序执行完毕释放。
    
    在程序执行过程中它们占据固定的存储单元,而不是冬天的分配和释放。
    
    在动态存储空间存放以下数据:
    
    1 函数形式参数,在调用函数时给形参分配存储空间。
    
    2 函数中定义没有关键字static声明的变量,即自动变量。
    
    3 函数调用时的现场现场保护和返回地址。
    
     对于以上数据,在函数开始调用时动态分配存储空间,函数结束释放空间,程序执行过程中这种分配和释放是动态的,如果在一个程序中两次调用同一个函数,而此函数中定义的局部变量,在两次调用时分配给这些局部变量的内存地址可能不同!
    
     
    
    在c语言中每个变量和函数都有两个属性:数据类型,数据存储类型。
    
    数据类型:double ,int之类的
    
    数据存储类型(静态存储,动态存储)
    
    存储类型分为四种:自动的(auto) 静态的(statis) 寄存器的(register) 外部的(extern
  • 相关阅读:
    回顾2018,展望2019
    NLog日志框架使用探究-1
    基于NetMQ的TLS框架NetMQ.Security的实现分析
    鸟哥的Linux私房菜笔记第五章,文件权限与目录配置(二)
    鸟哥的Linux私房菜笔记第五章,文件权限与目录配置(一)
    鸟哥的Linux私房菜笔记第四章
    ThinkPHP5.1 + tufanbarisyildirim 解析apk
    Java核心技术第八章——泛型程序设计(1)
    Java核心技术第五章——2.Object类
    Java核心技术第五章——1.类、超类、子类(2)
  • 原文地址:https://www.cnblogs.com/ly1973/p/5798495.html
Copyright © 2020-2023  润新知