C语言函数与程序结构
title : C语言函数与程序结构
tags : C语言作用域规则 , 外部变量 ,静态变量 ,寄存器变量,宏定义
grammar_cjkRuby: true
外部变量
变量声明用于说明变量的属性(类型),而变量定义还会引起存储器分配
int sp;
double s[MAX];
声明地方:函数外
如果上面的变量定义在所有函数之外,即为外部变量,并为这两个外部变量sp、s[MAX],分配储存单元以及数组的长度,在其源文件中的所有函数都可以使用这两个外部变量。
extern int sp;
extern double s[MAX];
为该源文件声明两个外部变量sp、s[MAX],不同的是这两个变量的长度在源程序的其他源文件中定义,没有再重新建立变量和分配储存单元。
源程序的所有源文件中,一个外部变量只能在某一个文件中声明,而其他地方不能再定义一个
相同的外部变量,如果要使用该变量可以通过extern声明进行访问。
外部变量定义的地方必须指明数组的长度。
静态变量
static int sp;
static double s[MAX];
声明地方:函数外,函数内
将sp、s[MAX]这两个外部变量声明为静态变量,除了该源文件内的函数可以访问sp、s[MAX],但是其他文件不可以通过extern访问静态变量sp和s[MAX]。
同样static同样也可以声明自动变量(在函数内部定义使用的变量),不过不同于其他内部变量,该变量不管其所在函数是不是被主函数调用,它一直存在不会随着所在函数被调用退出之后而消失,也就是说用static定义的内部变量只能在特定的函数内有自己独立的储存空间。
寄存器变量
register int sp;
register double s[MAX];
声明地方:函数内以及函数的形参
register的作用是告诉编译器,它声明的变量在程序中使用的频率较高,把声明的变量放在机器的寄存器中,这样会使程序更小、执行速度更快
程序块
while(***){
int i=1;
if(***){
……
}
……
}
花括号包括的语句就是一个程序块,在其中声明的变量会隐藏程序块以外的同名变量,该程序块内声明的变量和之外的变量无关,同样静态变量只会被初始化一次。
初始化
外部变量不进行初始化的话会直接初始化为0,而自动变量和局部变量没有进行初始化的话则视为没有定义(无用的信息)。
外部变量的初始化定义必须为常量表达式,不能包含其他已经定义的变量,相反自动变量和局部变量则可以包含
对于数组的初始化,外部变量的声明中如果后面的初始化表达式个数小于元数,那直接把多的元素初始化为0,相反对于局部变量则会引发错误
字符串数组声明比较特殊,可以直接用""来代替{}
C语言预处理器
#include " "和#include< >的区别
#include(文件包含指令)使得处理大量的#define指令以及声明更加方便,使得源文件里直接包含文件名指定的文件内容。
#include " "在源文件所在的位置查找该文件,如果没查找到该文件则根据相应规则查找该文件,
#include< >直接根据相应规则查找该文件
宏替换
#define 名字 文本将出现名字的地方都会被替换为文本,可以将较长行分为若干行,只需在待续行的末尾加上反斜杠\即可
#define宏定义的作用域是从定义点开始,然后一直到源文件的结尾
#define宏定义的不能对引号里面的字符串有用,如printf("YES")
#udef取消宏定义
#define也可以带上参数,这样就可以像实际参数一样,#define max(a,b) (a)>(b) ? (a) : (b)
条件包含
使用条件语句对预处理的语句进行判断,在预处理执行的过程中进行运算,可以在编译过程中根据计算所得的条件值选择性的包含不同的代码提供手段。
#if !defined(名字)……
#else / #endif / #elif……
defined(名字)表示当名字被定义,其值为1;否则,其值为0
#if !defined(HDR)
#define HDR
#endif
这样可以将每个头文件所依赖的其他头文件包含进来
C语言函数与程序结构的更多相关文章
- C/C++语言简介之程序结构
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数.因此, ...
- C语言函数不能返回数组,但可以返回结构体
为什么C语言函数可以返回结构体,却不可以返回数组?有这样的问题并不奇怪,因为C语言数组和结构体本质上都是管理一块内存,那为何编译器要区别对待二者呢? C语言函数为什么不能返回数组? 在C语言程序开发中 ...
- JavaScript初探 四 (程序结构)
JavaScript 结构 JavaScript 程序结构 JavaScript支持几乎和C语言一样的程序结构 分支结构 循环结构 分支结构 条件分支 if-else if语句:判断条件为true则执 ...
- 【C语言入门教程】1.1 基本程序结构
基本程序结构就是从上至下顺序执行的程序,C语言程序必须有且只有一个主函数,程序从主函数开始执行,直到主函数结束.下例是根据半径求圆形面积的程序源代码. #include <stdio.h> ...
- 菜鸟学习-C语言函数参数传递详解-结构体与数组 分类: C/C++ Nginx 2015-07-14 10:24 89人阅读 评论(0) 收藏
C语言中结构体作为函数参数,有两种方式:传值和传址. 1.传值时结构体参数会被拷贝一份,在函数体内修改结构体参数成员的值实际上是修改调用参数的一个临时拷贝的成员的值,这不会影响到调用参数.在这种情况下 ...
- 网易云课堂_C语言程序设计进阶_第6周:程序结构
6.1 全局变量 6.2 编译预处理 6.3 大程序结构 6.1 全局变量 全局变量 定义在函数外面的变量是全局变量 全局变量具有全局的生存期和作用域 它们与任何函数都无关 在任何函数内部都可以使用它 ...
- [C语言]进阶|程序结构
------------------------------------------------------------------------------------ 全局变量: // main.c ...
- GO语言的进阶之路-go的程序结构以及包简介
GO语言的进阶之路-go的程序结构以及包简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编辑,编译和运行 A,编辑 Go程序使用UTF-8编码的纯Unicode文本编写.大 ...
- C语言入门教程-(2)基本程序结构
1.简单的C语言程序结构 要建造房屋,首先需要打地基.搬砖搭建框架(这大概就是为什么叫搬砖的原因).学习计算机语言的时候也一样,应该从基本的结构开始学起.下面,我们看一段简单的源代码,这段代码希望大家 ...
随机推荐
- python2.7 使用super关键词 报错 TypeError: must be type, not&n
错误试验代码: class Base(): def meth(self): print "i'm base" class Derived(Base): def meth(self) ...
- HDU2036 改革春风吹满地
第一次看到这题果断放弃,毕竟几何白痴,第二次刷没做的题的时候突然想到这个三角形面积的向量法:S=|x1*y2-x2*y1| 但是此题可能是凹多边形,所以不能加绝对值,可以画个凹四边形看看. HDU2 ...
- xml解析总结-常用需掌握
Xml文档的解析 XML解析方式分为两种:DOM方式和SAX方式 DOM:Document Object Model, 文档对象模型.这种方式是W3C推荐的处理XML的一种方式. SAX:Simple ...
- Java面向对象 GUI 补录
Java面向对象 GUI 补录 知识概要:(1)GUI和CLI (2)AWT和SWING (3)AWT继承关系图 ...
- Jquery仿京东分类导航层简单实现
<script src="/js/jquery-1.11.1.min.js" type="text/javascript"></script& ...
- topN 算法 以及 逆算法(随笔)
topN 算法 以及 逆算法(随笔) 注解:所谓的 topN 算法指的是 在 海量的数据中进行排序从而活动 前 N 的数据. 这就是所谓的 topN 算法.当然你可以说我就 sort 一下 排序完了直 ...
- linux安装禅道的步骤
linux一键安装禅道:1.禅道帮助文档:http://www.zentao.net/book/zentaopmshelp/90.html 2.修改Apache的端口号:/opt/zbox/zbox ...
- Centos 7.3 编译 & 安装 & 测试 facebook faiss
许多 AI 系统训练完毕,正式上线时的基本操作往往可以抽象为:在高维向量空间中,给定一个向量,寻找与之最相近的 k 个向量.当向量数目异常巨大时,如何快速地执行这一基本操作,便成为 AI 系统在工程应 ...
- Linux入门(15)——Ubuntu16.04安装codeblocks搭建C/C++的IDE环境
安装codeblocks: sudo add-apt-repository ppa:damien-moore/codeblocks-stable sudo apt-get update sudo ap ...
- javascript入门知识点总结(一)
学了几天javascript,现总结一下原生javascript的基本知识点. 一.javascript基本知识 变量 定义: var a = 123; var b = 'abc'; //连写 var ...