




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第6讲简单程序设计 2 一 程序开发过程 三个过程 1 预编译 预编译程序负责处理组成程序的各个源文件和头文件的预编译指令 如 include define 将带有预编译指令的程序文件转化为纯粹的C 程序文件 头文件的内容被插入到源程序文件中 2 编译 编译程序将C 源程序翻译成对应的二进制代码 即二进制机器语言 扩展名为 obj3 连接 连接程序将组成程序的所有 obj文件和用到的库文件连接起来 形成一个完整的可执行文件 程序的编译以文件为单位进行 当程序由多个文件构成时 若对其中的一个文件的代码进行了修改 则只需编译该文件 而无需编译所有文件 3 二 文件之间的信息共享 解决程序由多个文件组成时 多个文件间如何共享问题引入外部变量和外部函数外部变量在变量名前加关键字extern说明为外部变量编译器看到extern时 说明extern后定义的变量不在本文件中定义 而在其它文件中定义 main cpp includeintx voidmain file cppexternintx voidfunc cout x x 5 4 注意事项 当文件中出现了一个extern变量说明时 必须保证组成同一程序的其它文件中有且只有一个对该变量的定义 main cppintx inty voidmain file1 cppexternintx inty voidfunc1 file2 cppexternintx externinty externintz voidfunc2 5 若在说明一个变量时加上了对变量的初始化 编译器会当成变量定义 而不当成变量说明来使用 如 externintx 10 编译器会忽略前面的extern 而将其当成是对变量x的定义extern说明的变量必须是具有全局作用域 不能是函数的局部变量 6 2外部函数 外部函数没有局部函数和全局函数之分 C 中函数默认是extern当编译器看到函数的原型后 就认为在程序的某个文件将能找到该函数的定义 所以允许在说明这个函数原型的文件中使用该函数使用方法 在文件file1 cpp中定义如下 intmax intx inty return x y x y 另一个文件中要使用 只需说明函数原型intmax int int 等价于 externintmax int int 7 main cppvoidprint char voidmain print Hello friend n file1 cpp includevoidprint char str cout str 函数默认是extern 一般只要直接说明函数原型 就可以使用了 8 3 静态全局变量与静态函数 若不希望在一个文件中定义的某些变量或函数在其它文件中使用时 可定义为静态的 static 如 staticintx staticintmax int int 使用static全局变量和static函数优点 可将一些文件的实现细节封装起来 这些实现细节无需其它文件了解 安全切简化了文件之间的接口 不同文件可以使用相同名称的变量和函数完成文件功能 而不用担心名字冲突 内联函数默认是静态函数 只在定义范围内有效用const定义的常量也具有静态性 可在不同的文件中定义同名的常量 9 文件main cpp includeintcompare int int floatcompare float float voidmain cout compare 13 4 endl cout compare 2 3f 4 5f endl file1 cpp staticintmax int int intcompare intval1 intval2 if val1 val2 return0 if max val1 val2 val1 return1 elsereturn 1 intmax inti intj return i j i j file2 cpp staticfloatmax float float floatcompare floatval1 floatval2 if val1 val2 return0 if max val1 val2 val1 return1 elsereturn 1 floatmax floati floatj return i j i j 10 main cppexterninta staticintb 3 externintsfunc int voidmain inti b a func i a sfunc i 文件func1 cppexternintb1intfunc inti return i b staticintsfunc inti return i b 11 三 头文件 include include 文件名 include指令可以嵌套 可在一个头文件中再有 include指令头文件包含内容的标准内容是否可能要被多个文件使用 若只有一个文件内容要使用 可直接将信息放到源文件中若多个文件包含这个头文件 是否会引起冲突 若会引起冲突 则这样的信息就不要放到头文件中 如全局变量的定义 函数的定义 12 math h 预编译指令 ifndef INC MATH define INC MATH 结构定义struct complex doublex y 常量定义 define DOMAIN1 define SING2 define OVERFLOW3 函数原型声明int cdec1abs int double cdec1acos double double cdec1asin double 外部变量说明externdoubleHUGE 内联函数定义inlinelongdoubleasco1 longdouble X return acos double X inlinelongdoubleasin1 longdouble X return asin double X endif INC MATH 13 C 头文件一般包含的内容 预编译指令 define ifdef endif include函数声明 intcalculate int int 内联函数定义 inlinefloatmin float float 类型定义 struct enum class typedef 外部数据说明 externinti externcharname 常量定义 constintPI 3 1415926 注释也可包含入下内容全局变量定义静态函数和静态变量定义一般函数定义类的成员函数的定义 14 预编译指令 条件编译指令 if else elif endif ifdef ifndef和C 中的if语句类似预编译器可根据条件决定保留或不保留程序文件中的某些内容如 ifndef INC MATH define INC MATH endif INC MATH ifndef PI define PI constfloatPI 3 1415926 endif PI 15 define指令通常用来与条件编译指令配套使用 定义与否可用ifdef或ifndef来测试 入 define NAME ifdef NAME ifndef NAME 16 main cpp include func1 h include func2 h voidmain abs 4 acompare 3 4 func1 cpp include func1 h intabs inti return i 0 i i func1 h ifndef FUNC1 define FUNC1 intabs int endif func2 cpp include func2 h intacompare inti intj returnabs i abs j func2 h ifndef FUNC2 define FUNC2 include func1 h intacompare inti intj endif func1 cpp include func1 h intabs inti return i 0 i i func1 h ifndef FUNC1 define FUNC1 intabs int endif func1 cppintabs int intabs inti return i 0 i i func2 cpp include func2 h intacompare inti intj returnabs i abs j func2 h ifndef FUNC2 define FUNC2 include func1 h intacompare inti intj endif func2 cppintabs int intacompare inti intj intacompare inti intj returnabs i abs j main cppintabs int intacompare inti intj voidmain abs 4 acompare 3 4 17 四 生存期 标识符在程序运行过程中生存的时间 如 ex6 1int pGlobal voidfunc1 voidfunc2 voidmain func1 func2 voidfunc1 intx pGlobal newint voidfunc2 inty deletepGlobal 18 生存期与内存 内存空间分为 四个区 不同生存期的变量存放的内存区域不同代码区 全局数据区 大小在程序开始运行前就已确定 存放具有静态生存期的变量 包括全局变量 静态全局变量机 静态局部变量等 堆区 动态申请的空间在堆中分配 具有动态生存期的变量空间处于内存堆中 栈区 同样 具有局部生存期的变量存放到栈区中 具有静态生存期的变量由系统自动初始化为0 而系统不对局部生存期和动态生存期的变量进行初始化 19 includeinti voidmain intj cout Globalvariablei i endl cout Localvariablej j endl Globalvariablei 0Localvariablej 2008720024 20 静态局部变量 函数的局部变量具有局部生存期 每次函数结束后 其局部状态信息会全部丢失在变量定义前加关键字static 如 staticintx intaddCount staticintcount count returncount 特性 具有静态生存期只被初始化一次 在函数退出后 静态局部变量不被释放
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广式烧腊知识培训课件
- 小学取暖安全培训内容课件
- 2025广西河池市计量测试研究所招聘2人模拟试卷及答案详解(有一套)
- GPR40-agonist-8-生命科学试剂-MCE
- 广州食品安全培训课件
- 2025年纯水冷却设备项目合作计划书
- 2025广西南宁学院招聘博士21人考前自测高频考点模拟试题及答案详解一套
- 2025年高压液压柱塞泵马达项目合作计划书
- 农耕文明宣传教育与农技培训协议
- 小学交通安全培训简讯课件
- 破产清算审计管理制度
- YY/T 1947-2025重组胶原蛋白敷料
- 洗涤厂设备管理制度
- GB/T 16603-2025锦纶牵伸丝
- 水生入侵物种防控-洞察及研究
- 游戏主题咖啡馆与餐厅行业深度调研及发展项目商业计划书
- T/CCMA 0015-2023高处作业吊篮和擦窗机检查、维护保养和安全操作规则
- 泡沫混凝土常见问题分析与对策
- 2025年初级银行从业资格之初级个人理财考试题库
- 综合工时劳动合同协议
- 银行保险机构安全保卫工作自查操作手册
评论
0/150
提交评论