14.条件编译

本文详细介绍了C语言中的宏操作符、条件编译、多文件编程、结构体的概念及应用。通过实例展示了如何使用宏操作符处理参数,如何通过条件编译控制代码编译流程,以及如何在多文件编程中组织代码。此外,还深入探讨了结构体的声明、初始化和使用方法。
宏操作符包括#和##
这两个操作符都是对宏不代表数字的参数进行
    处理的
#操作符可以把一个参数转换成字符串字面值
(在参数前后各加一个")
##操作符可以把一个代表标识符的参数和其他内容
合并得到一个新标识符


条件编译可以在编译的时候决定哪些语句需要编译
    哪些语句不需要编译
条件编译是使用预处理指令实现的


#ifdef/#ifndef...#else...#endif
以上结构可以在编译的时候根据一个宏是否曾经
    被定义过从两组语句中选择一组编译
#ifdef指定如果后面的宏名称被定义了则编译
前一组,否则编译后一组
#ifndef指定如果后面的宏名称没有被定义则编译
前一组,否则编译后一组


#if...#elif(次数任意)...#else....#endif
在#if和#elif后面都要加布尔值,当布尔值为真
   时编译它下面的那组语句
以上结构可以根据布尔值从多组语句中选择一组
   编译
布尔值可以使用逻辑表达式计算得到,逻辑表达式
    中可以使用所有逻辑操作符


多文件编程中一个文件里可以包含多个函数,
    一个函数必须完整的属于一个文件


多文件编程步骤
1.把多个函数分散在多个源文件里(主函数单独
放在一个文件里)
2.为所有源文件编写配对的以.h作为扩展名的
    文件,这种文件叫头文件。(只包含主函数
的源文件不需要编写配对的头文件)
    只要不分配内存的内容都可以写在头文件
里(至少要包含配对源文件中所有函数的
声明)
3.为每个源文件使用#include预处理指令把它所
    需要的头文件包含进来(必要的头文件
包括配对头文件和包含被使用函数声明的
头文件)


编译多文件程序时需要在gcc命令中包含所有源
    文件名称


头文件内容应该被包含在条件编译预处理指令
    之间,这样可以避免同样的内容被多次
重复编译。
头文件中的宏名称应该采用文件路径,这样可以
    避免不同头文件中的宏名称冲突


如果在一个源文件中需要使用另外一个源文件
    中声明的全局变量则需要使用extern关键字
在这个文件中把它再次声明一下。这种声明
方式不会分配存储区只是在这个文件中引入
变量名称。


使用extern关键字声明变量的语句应该放在头
    文件里


结构体可以把多个相关的不同类型的数据合并
    成一个整体
结构体是一种数据类型,它本身不占存储区,
    它仅仅描述了多种不同类型数据之间的
关系
使用结构体作为数据类型声明的变量叫做结构体
    变量,结构体变量里才真正包含存储区。
声明结构体的时候需要使用struct关键字


结构体声明中包含的变量声明语句不会分配存储区
    因此也不可以初始化


结构体声明通常写在头文件里


在结构体声明语句后写一个变量名称就可以声明
    结构体变量
这样声明结构体变量会导致结构体声明语句分配
    存储区,所以通常不这么做


可以把struct关键字和结构体名称合起来作为
    数据类型名称使用声明结构体变量


C语言里结构体内部不可以包含函数


typedef关键字可以用来给一个数据类型起别名
绝不可以用宏给数据类型起别名,这有可能会
    造成错误
可以把结构体声明语句和typedef语句合并,这样
    就同时声明了结构体也给它起了别名
可以在合并后把结构体本身的名称省略,但是
    这样就不能使用struct关键字和结构体名称
作为数据类型声明结构体变量了。


结构体变量名称后加.然后加子部分名称就可以
    表示结构体变量中某一部分的存储区


结构体变量存储区也可以和指针捆绑,这种指针
    叫结构体指针
结构体指针后加->然后加子部分名称就可以表示
    捆绑结构体存储区里的某个子部分


结构体可以采用数组初始化的语法进行初始化




结构体变量不能作为整体参与数学计算,只能
    对结构体变量内部某个基本类型的子部分
进行数学计算
练习:
声明一个结构体,这种结构体应该可以记录一个像素的位置,
声明结构体,这种结构体的变量应该可以记录屏幕上一个长方形的位置(长方形一定是水平的)


结构体变量不能作为整体参与数学计算
只能对结构体变量内部某个基本类型的子部分进行数学计算


练习:
编写程序根据用户给定的长方形的位置计算出它的面积




预习:
    1.结构体(结构体作为函数的形式参数和
返回值,数据对齐和补齐)
    2.枚举与联合
    3.动态内存分配


作业:
    1.声明一个结构体,这个结构体的变量可以
记录屏幕上一条线段的位置。编写程序从
键盘得到两条线段的位置,把其中长度
长的那个线段位置打印在屏幕上。



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值