C-函数与程序结构

函数

定义
返回值类型 函数名(参数声明表){
    声明和语句
}

除函数名外,其余个组成部分都可省略。
如果函数定义中省略了返回值类型,则默认为int类型。
最简单的函数:a(){}
该函数不执行任何操作也不没有返回任何值,可以在程序开发期间用以保留位置(留待以后填充代码)。

声明

函数的定义出现在使用之前,或者预先进行声明。
函数的声明必须与定义一致。
如果没有声明,则会在第一次使用时被隐式声明,返回值被假定为int。
如果声明中没有包含参数,则编译程序会关闭所有的参数检查。

返回值

返回值为拷贝值
因此,可以返回局部变量的值,不可以返回局部变量的指针,只是对指针所指向地址的拷贝,其局部变量已经随函数被销毁,指向的无意义的值。

其他

程序可以看作是变量定义和函数定义的集合。
函数之间的通信可以通过参数,函数返回值以及外部变量进行。
函数在源文件中出现的次序可以是任意的。

在UNIX系统中,假定有3个函数分别在名为a.c,b.c,c.c三个源文件中。
则先按特定顺序编译3个文件,得到a.o,b.o,c.o三个目标文件。
然后将这3个目标文件一起加载到a.out可以执行文件中。

 
 

内部变量&外部变量

内部是指定义在函数内部,外部是指定义在函数外部。由于C不允许在函数中定义函数,因此函数本身就是外部的。
C语言程序可以看成是由一系列的外部对象构成,这些外部对象可能是变量或函数。
外部变量可以在全局范围内访问,这就为函数之间的数据交换提供了一种方式。
外部变量与内部变量相比由更大的作用域和更长的生命周期。
内部变量从所在函数被调用时开始存在,在函数退出时消失。
外部变量是和程序一同存在的。
 
 

作用域

作用域是指程序中可以使用该名字的部分。
内部变量作用域是所在函数中声明的地方开始,到函数结束。
外部变量和函数作用域是从声明它的地方开始,到其所在的(待编译的)文件的末尾结束。
声明:用于说明变量的属性(主要是类型)
定义:除说明属性外还引起存储器的分配
如果要在外部变量定义之前使用该变量,或者外部变量的定义与变量的使用不在同一个源文件中,则必须在相应的变量声明中强制使用extern。
在一个源程序的所有源文件中,一个外部变量只能在某个文件中定义一次。而其他文件可以通过extern声明来访问它。
外部变量的初始化只能出现在定义中。
 
 

头文件

若程序本身太长,可以把程序分割成若干源文件。
但是要考虑到定义和声明在这些文件之间的共享问题。
尽可能把共享的部分(即公共部分)集中在一起,放在头文件中。
 
 

static

外部变量和函数

用static修饰符可以限定外部变量与函数的作用域为所在文件,可以达到隐藏外部对象的目的。
未用static修饰时外部变量和函数时整个程序可见,修饰后仅对所在文件可见。
在其他文件中可以定义相同名字,不会发生冲突。

内部变量

当static修饰内部变量时,作用域还是该函数,但是它不会随着所在函数的被调用和退出而存在和消失。它是一种只能在某个特定函数中使用但是一直占据存储空间的变量。
 
 

初始化

外部变量和静态变量被初始化为0
内部变量的初值为无用信息
 
 

C预处理器

是编译过程中单独执行的一个步骤。
#include 用于在编译期间把指定文件的内容包含进当前文件中。
#define 用任意字符序列替代一个标记。

#include

#include “文件名”
在源文件所在的位置查找该文件(通常为自己写的文件)
#include <文件名>
根据相应的规则查找该文件(通常为库文件)
源文件的代替通常会有多个#include 指令,它们用以包含常见的#define语句和extern声明,或从头文件中访问库函数的函数原型声明。

#define

#define 名字 替换文本
这是一种最简单的宏替换,后续所有出现名字记号和地方都将被替换为替换文本。
替换文本可以是任意字符串,到该行行尾的所有部分。
若需分行,则在行尾加上.

猜你喜欢

转载自blog.csdn.net/qq_31730735/article/details/80720212