一个好的程序首先要有好的程序结构,我从变量和结构两个方面来做分析。

一、浅谈程序中的变量

一个程序架构最基本的就是程序变量,谈到程序中的变量,我们应该考虑两部分,一方面是变量的作用域,一方面是变量的生存期。

我们就从这两个角度对变量进行分析:

(1)全局变量
全局变量的声明要放在主函数之前,它的作用域是整个程序全局,生存期是程序整个周期。

(2)局部变量
局部变量是在某个局部声明的变量,它的作用域为特定区域,例如函数体内声明的变量作用域在函数体内,
函数体执行完成则完成。如果变量声明在一个for语句里面,则他作用的区域也就是这个for语句。同样生命
周期也之在特定区域。

(3)静态局部变量
static 静态局部变量所声明的变量作用域是某个特定函数体,但是其生命周期是整个程序的生命周期。

注意:
函数体不能传递回本地变量的地址,具有危险性,因为函数体执行完成后,则局部变量的内存区被释放。

举个例子来看

#include <stdio.h>
int value = 0;//全局变量
void fun(); void fun1();
int main()
{
int i=0; //全局变量
printf("main:%d\n",i);//此处使用的i应该是处于main级别下的i值。
fun();
printf("main:%d\n",i);//此处打印的依然是main下的i
fun();
fun1();
printf("main:%d\n",i);//此处打印的依然是main下的i
fun1();
printf("main:%d\n",i);//此处打印的依然是main下的i
} void fun()
{
int i = 10;//此处的i值只作用于这个函数体而且每次进入函数就定义一次,离开函数就释放空间
printf("fun:%d\n",i);//此处打印的是这个局部变量每次都是1
} void fun1()
{
static int i = 10;//静态局部变量,其只声明一次,而一直存活
printf("fun1:%d\n",i);
i++;
}

  

二、程序结构分析

大的程序一般都要进行模块化编程
每个模块都对应着头文件和源文件
源文件的内容是程序的主题部分,函数的内容
头文件的内容是程序的解释说明,包括全局变量的声明和所有对外公开函数的声明

(1)头文件
1、头文件包含问题
#include "" 与 #include < >
""是先在当前目录下寻找此文件,如果没有再去系统设定的目录下寻找,一般自己写的文件就用""
<>是直接去系统设定的目录下寻找文件,一般都是系统提供的文件用<>

要注意防重复包含
所以需要在每个头文件作如下编写
(标准头文件结构)
#ifndef _MAX_H_
#define _MAX_H_
//程序区
#endif

2、头文件中的变量要想被外部调用应该用extern
extern int i;

注意:声明与定义的区别
定义一个变量,定义一个函数是在程序中要产生代码的。
而声明在程序中是不生成代码的,因为声明只是告诉编译器我有这个东西,让编译器记住。
例如在主函数之前我们都要有函数的声明,而函数体则在主函数之后定义。

(2)源文件
包含函数的解释(源代码)

C语言之程序结构的更多相关文章

  1. [C语言]进阶|程序结构

    ------------------------------------------------------------------------------------ 全局变量: // main.c ...

  2. Go语言(1)——程序结构

    程序结构 基础部分仅仅列举和其他语言不一样的地方(C语言为例). 声明 Go语言有四个主要声明:var.const.type.func,类似于C语言中的变量,常量,结构体和函数. package ma ...

  3. 【Go语言系列】2.3、Go语言基本程序结构:变量及常量

    1.什么变量 变量来源于数学,从根本上说,变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间. 1.1变量声明 Go 语言变 ...

  4. 【Go语言系列】2.2、Go语言基本程序结构:关键字与标识符

    什么是标识符 标识符用来命名变量.类型等程序实体.标识符是指Go语言对各种变量.方法.函数等命名时使用的字符序列,标识符由若干个字母.下划线_.和数字组成,且第一个字符必须是字母.通俗的讲就是凡可以自 ...

  5. 【Go语言系列】2.1、Go语言基本程序结构:注释

    注释在程序中的作用是对程序进行注解和说明,便于对源码的阅读.在源码中适当地添加注释,能够提高源码的可读性. Go语言的注释主要分成两类,分别是单行注释和多行注释. 单行注释: //单行注释 多行注释: ...

  6. [Objective-C语言教程]程序结构(3)

    1. Objective-C Hello World示例 Objective-C程序基本上由以下部分组成 - 预处理程序命令 接口 实现 方法 变量 声明和表达 注释 下面来看一下打印“Hello W ...

  7. 【C语言入门教程】1.1 基本程序结构

    基本程序结构就是从上至下顺序执行的程序,C语言程序必须有且只有一个主函数,程序从主函数开始执行,直到主函数结束.下例是根据半径求圆形面积的程序源代码. #include <stdio.h> ...

  8. 网易云课堂_C语言程序设计进阶_第6周:程序结构

    6.1 全局变量 6.2 编译预处理 6.3 大程序结构 6.1 全局变量 全局变量 定义在函数外面的变量是全局变量 全局变量具有全局的生存期和作用域 它们与任何函数都无关 在任何函数内部都可以使用它 ...

  9. C语言函数与程序结构

    title : C语言函数与程序结构 tags : C语言作用域规则 , 外部变量 ,静态变量 ,寄存器变量,宏定义 grammar_cjkRuby: true --- 外部变量 变量声明用于说明变量 ...

随机推荐

  1. C++ ComboBox基础

    关键点 实现过程 //添加 //添加字符串 m_cbo1.AddString("AAA"); m_cbo1.AddString("BBB"); m_cbo1.A ...

  2. Numeral.js 是一个用于格式化和数字四则运算的js 库

    1.Numeral.js 是一个用于格式化和数字四则运算的js 库. 2.支持多种语言,包含中文在内的17种语言. 在浏览器中引用js文件: <script src="numeral. ...

  3. android之自定义ViewGroup和自动换行的布局的实现

    viewgroup简单说就是可以装view的view.今天遇到一个问题,就是需要一个可以自动根据一行中view的宽度自动换行的布局,网上 找了下,没有相关的例子,但是找到了思路:自定义一个viewgr ...

  4. Redis学习手册(虚拟内存)

    一.简介: 和大多NoSQL数据库一样,Redis同样遵循了Key/Value数据存储模型.在有些情况下,Redis会将Keys/Values保存在内存中以提高数据查询和数据修改的效率,然而这样的做法 ...

  5. cocos2dx下最大纹理大小取决于平台

    原文:http://www.cocos2d-x.org/wiki/Max_size_of_textures_in_cocos2d-x_depends_on_each_platform 在理论上,coc ...

  6. Android(java)学习笔记152:Android运行时异常“Binary XML file line # : Error inflating class”

    在原生Android下编译APK,编译没有问题,但是在运行的时候经常出现如标题所描述的异常:"Binary XML file line # : Error inflating class&q ...

  7. android和javascript之间相互通信实例分析

    1.  AndroidManifest.xml中必须使用许可 "android.permission.INTERNET", 否则会出Web page not available错误 ...

  8. HTML表单元素中disabled的元素的值不会提交到服务器

    一.在HTMl页面的form表单中对disabled的元素的属性和值不会提交到服务器 实例1: <form action="#"> <input type=&qu ...

  9. Think in java浏览一

    Think in java作为java语言的圣经书籍之一,几乎成为每个java程序员必看的书籍,不看都不好意思说自己是java程序员,不过一般也不说自己认真看了,就说自己翻了翻.作为写安卓的,当然也要 ...

  10. window环境下 node.js 游戏框架pomelo 安装与启动

    一.软件准备 1.1 下载node.js 1.2 下载python 2.5 < version <3.0 1.3 下载c++编译器(一般控制面板中-->程序和功能上已有,如果没有需要 ...