test.h
//防止重复包含头文件和防止重定义
#ifndef _TEST_H_
#define _TEST_H_
#define DEBUG 0
#define BUF_SIZE 1024
int GetNum();//调用外部定义函数时,在函数调用前进行extern声明就可以,extern可以省略
#endif
test.c
/********************************************************************************************
* Module Name :模块化代码
* Module versions :模块版本
* Module Date :2016/08/05
* Student:007
* Description :说明书
* Others :合作其他人
* Revision History :修订历史
********************************************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>//标准输入输出库
#include<stdlib.h>//系统库
#include<string.h>
#include"test.h"
char acBuf[BUF_SIZE];
static int s_iNum;//外部变量声明,不是定义;声明不占内存,可以重复声明;告诉编译器到外部文件去找定义
//(整个解决方案找)
//全局变量共享的方式,不建议;1影响模块独立性
#if DEBUG
int GetNum()
{
return s_iNum;
}
#endif
void SetNum(int iNum)
{
s_iNum = iNum;
}
main.c
/********************************************************************************************
* Module Name :模块化代码
* Module versions:模块版本
* Module Date:2016/08/05
* Student:007
* Description :说明书
* Others:合作其他人
* Revision History:修订历史
********************************************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>//标准输入输出库
#include<stdlib.h>//系统 库
#include"test.h"
int GetTimes();
static int g_iCnt =0;//因为全局变量作用域范围广,故会影响到别的函数和别的源文件,故加专门标识会利于编程
/*=========================
* Function :main
* Description :主程序,程序最开始运行的地方
* Input Para :无
* Output Para :无
* Return Value:有返回值,进程(exe)通信,另外一个进程可以通过这个返回值,判断进程结束
===========================*/
int main()
{
/*
作用域:这种变量的有效范围就称之为该变量的作用域
分为两种变量:局部变量和全局变量
*/
/*
局部变量:函数体内定义的变量,他的作用域仅限于函数内
1、主函数里面定义的变量只能在主函数中使用;主函数也不能使用其他函数中定义的变量
2、形参属于被调函数的局部变量,实参是主调函数的局部变量
3、允许在不同的函数内使用相同的变量名
4、在复合语句中也可以定义变量,其作用域只在复合语句范围
*/
/*
全局变量:函数体外定义的变量,其作用域是整个源程序(整个解决方案)
全局变量跟局部变量同名:在局部变量作用域范围内,会暂时屏蔽全局变量
*/
/*
动态存储和静态存储
动态存储:运行期间,根据需要进行动态分配存储空间的方式(需求结束就释放)
静态存储:运行期间,分配固定的存储空间的方式(程序运行结束才释放)
动态存储:1、形参 2、局部变量 (函数调用的时候,分配内存,调用 结束就释放内存)3函数入口地址
动态存储最节约运行内存RAM,所以程序中,应该尽量使用动态存储
静态存储:1、全局变量 2、static
程序运行开始就被分配了固定内存,直到程序结束才释放内存
静态存储较为占用运行内存RAM,所以程序中,应该尽量少用
*/
/*
局部变量:auto变量,一般auto是省略
*/
/*
有时,我们需要将局部变量的值在函数调用结束后,不消失,用关键字“static”进行声明
1、在整个程序运行期间,都不会被释放
2、编译的时候,只赋值一次,运行的时候,不再赋值
3、封装静态存储变量,虽然是静态存储,但是仍然局限于一定范围,不影响范围外的其他变量
静态局部变量:作用域,函数体内
静态全局变量:作用域,源文件内
静态函数:作用域,源文件内,(可以防止跟外部函数同名)
*/
/*
统计函数调用的次数
*/
/*
extern 外部变量声明
如果变量在外部定义的,如果要使用,就用extern进行声明
*/
/*
预编译 #:在编译在语法扫描前进行第一次扫描(类似看书前,看一下目录)
宏定义#define _CRT_SECURE_NO_WARNINGS
文件包含#include<stdio.h>//标准输入输出库
条件编译
#ifndef _INC_STDIO
#define _INC_STDIO
#end
*/
/*
宏定义:用一个标识符代替一个常数\表达式等
1、宏不是语句,不需要加分号
2、“完全替代”
3、建议,标识符采用全大写 只用于替代常数(如果看到数字或者字符,一般都要想到用宏来替代)
#define PI 3.14159
2*PI*PI
#define X 3
#define Y X+3//凡属替代表达式,都加括号
#define Y1 (X+3)//凡属替代表达式,都加括号
y=Y*3=X+3*3=3+3*3=12
*/
/*
文件包含:语法讲,宏定义是完全替代一行;替代多行,能否将一些共同声明(共同变量)用一个文件存储,然后
采用替代多行的形式,谁使用谁就包含
包含头文件有两种形式:“”和<>
<>去系统目录中寻找头文件,一般系统头文件使用
“”,先到当前目录下寻找头文件,找不到再到系统目录中去寻找,一般自定义头文件使用
*/
/*
条件编译:按照条件判断是否编译某些内容
1、ifdef 标识符 _CRT_SECURE_NO_WARNINGS
程序段
#else
程序段
#endif
2、ifndef 标识符
程序段
#else
程序段
#endif
*/
GetTimes();
GetTimes();
GetTimes();
GetTimes();
printf("函数调用了%d次\n", GetTimes());
system("pause");
return 0;
}
/*=========================
* Function :main
* Description :主程序,程序最开始运行的地方
* Input Para :无
* Output Para :无
* Return Value:有返回值,进程(exe)通信,另外一个进程可以通过这个返回值,判断进程结束
===========================*/
int GetTimes()
{
static int s_iCnt = 0;//编译的时候执行,运行的时候,跳过
s_iCnt++;
return s_iCnt;
}
9.宏与头文件
最新推荐文章于 2024-05-13 14:27:58 发布