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

一、浅谈程序中的变量

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

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

(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. netbeans下将全部jar包打成一个,俗称fat jar

    netbeans的java项目中.默认会将配置好的外部引用jar包,复制到dist文件夹的lib文件夹中去.假设须要公布出去.就须要将dist文件夹生成的jar和lib文件夹都拷贝出去公布,不方便. ...

  2. C# 以ThreadStart方式实现多线程

      3.1 使用ThreadStart委托 这 里先以一个例子体现一下多线程带来的好处,首先在Message类中建立一个方法ShowMessage(),里面显示了当前运行线程的Id,并使用 Threa ...

  3. Building and setting up QT environment for BeagleBone

    There are too few information available on how to easily setup QT environment for building Beaglebon ...

  4. Android自定义View之ProgressBar出场记

    关于自定义View,我们前面已经有三篇文章在介绍了,如果筒子们还没阅读,建议先看一下,分别是android自定义View之钟表诞生记.android自定义View之仿通讯录侧边栏滑动,实现A-Z字母检 ...

  5. Java基础知识强化之集合框架笔记73:如何选择使用哪种集合

    1. 到底使用那种集合.    看需求 是否是键值对象形式: 是:Map 键是否需要排序: 是:TreeMap 否:HashMap 不知道,就使用HashMap. 否:Collection 元素是否唯 ...

  6. c结构体初始化问题

    结构体中的数组的初始化问题 我的代码 C/C++ code #include <stdio.h> #include <stdlib.h> struct a { int leng ...

  7. MYSQL小常识

    在mysql里面利用str_to_date()把字符串转换为日期 此处以表T_TGS_ALARMED的BJSJ为例,查询当前时间在此范围之内的数据. insert into T_TGS_ALARMED ...

  8. Linux下crontab命令详解

    crontab -e编辑定时任务 * * * shell.sh 从左到右依次是:分钟.小时.天.周.月

  9. temporary

    private void OnAttendeeConnected(object pObjAttendee) { IRDPSRAPIAttendee pAttendee = pObjAttendee a ...

  10. 推荐几款提高.net编程效率的辅助工具

    1.Resharper ReSharper是一个JetBrains公司出品的著名的代码生成工具,其能帮助Microsoft Visual Studio成为一个更佳的IDE.它包括一系列丰富的能大大增加 ...