C语言之程序结构
一个好的程序首先要有好的程序结构,我从变量和结构两个方面来做分析。
一、浅谈程序中的变量
一个程序架构最基本的就是程序变量,谈到程序中的变量,我们应该考虑两部分,一方面是变量的作用域,一方面是变量的生存期。
我们就从这两个角度对变量进行分析:
(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语言之程序结构的更多相关文章
- [C语言]进阶|程序结构
------------------------------------------------------------------------------------ 全局变量: // main.c ...
- Go语言(1)——程序结构
程序结构 基础部分仅仅列举和其他语言不一样的地方(C语言为例). 声明 Go语言有四个主要声明:var.const.type.func,类似于C语言中的变量,常量,结构体和函数. package ma ...
- 【Go语言系列】2.3、Go语言基本程序结构:变量及常量
1.什么变量 变量来源于数学,从根本上说,变量相当于是对一块数据存储空间的命名,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间. 1.1变量声明 Go 语言变 ...
- 【Go语言系列】2.2、Go语言基本程序结构:关键字与标识符
什么是标识符 标识符用来命名变量.类型等程序实体.标识符是指Go语言对各种变量.方法.函数等命名时使用的字符序列,标识符由若干个字母.下划线_.和数字组成,且第一个字符必须是字母.通俗的讲就是凡可以自 ...
- 【Go语言系列】2.1、Go语言基本程序结构:注释
注释在程序中的作用是对程序进行注解和说明,便于对源码的阅读.在源码中适当地添加注释,能够提高源码的可读性. Go语言的注释主要分成两类,分别是单行注释和多行注释. 单行注释: //单行注释 多行注释: ...
- [Objective-C语言教程]程序结构(3)
1. Objective-C Hello World示例 Objective-C程序基本上由以下部分组成 - 预处理程序命令 接口 实现 方法 变量 声明和表达 注释 下面来看一下打印“Hello W ...
- 【C语言入门教程】1.1 基本程序结构
基本程序结构就是从上至下顺序执行的程序,C语言程序必须有且只有一个主函数,程序从主函数开始执行,直到主函数结束.下例是根据半径求圆形面积的程序源代码. #include <stdio.h> ...
- 网易云课堂_C语言程序设计进阶_第6周:程序结构
6.1 全局变量 6.2 编译预处理 6.3 大程序结构 6.1 全局变量 全局变量 定义在函数外面的变量是全局变量 全局变量具有全局的生存期和作用域 它们与任何函数都无关 在任何函数内部都可以使用它 ...
- C语言函数与程序结构
title : C语言函数与程序结构 tags : C语言作用域规则 , 外部变量 ,静态变量 ,寄存器变量,宏定义 grammar_cjkRuby: true --- 外部变量 变量声明用于说明变量 ...
随机推荐
- netbeans下将全部jar包打成一个,俗称fat jar
netbeans的java项目中.默认会将配置好的外部引用jar包,复制到dist文件夹的lib文件夹中去.假设须要公布出去.就须要将dist文件夹生成的jar和lib文件夹都拷贝出去公布,不方便. ...
- C# 以ThreadStart方式实现多线程
3.1 使用ThreadStart委托 这 里先以一个例子体现一下多线程带来的好处,首先在Message类中建立一个方法ShowMessage(),里面显示了当前运行线程的Id,并使用 Threa ...
- Building and setting up QT environment for BeagleBone
There are too few information available on how to easily setup QT environment for building Beaglebon ...
- Android自定义View之ProgressBar出场记
关于自定义View,我们前面已经有三篇文章在介绍了,如果筒子们还没阅读,建议先看一下,分别是android自定义View之钟表诞生记.android自定义View之仿通讯录侧边栏滑动,实现A-Z字母检 ...
- Java基础知识强化之集合框架笔记73:如何选择使用哪种集合
1. 到底使用那种集合. 看需求 是否是键值对象形式: 是:Map 键是否需要排序: 是:TreeMap 否:HashMap 不知道,就使用HashMap. 否:Collection 元素是否唯 ...
- c结构体初始化问题
结构体中的数组的初始化问题 我的代码 C/C++ code #include <stdio.h> #include <stdlib.h> struct a { int leng ...
- MYSQL小常识
在mysql里面利用str_to_date()把字符串转换为日期 此处以表T_TGS_ALARMED的BJSJ为例,查询当前时间在此范围之内的数据. insert into T_TGS_ALARMED ...
- Linux下crontab命令详解
crontab -e编辑定时任务 * * * shell.sh 从左到右依次是:分钟.小时.天.周.月
- temporary
private void OnAttendeeConnected(object pObjAttendee) { IRDPSRAPIAttendee pAttendee = pObjAttendee a ...
- 推荐几款提高.net编程效率的辅助工具
1.Resharper ReSharper是一个JetBrains公司出品的著名的代码生成工具,其能帮助Microsoft Visual Studio成为一个更佳的IDE.它包括一系列丰富的能大大增加 ...