Day15_宏操作符、条件编译及结构体



2013年10月22日 星期二 10时02分05秒

#是一个宏操作符
这个操作符可以把宏的一个参数转换成字符串字面值

##也是一个宏操作符
这个操作符可以把一个代表标识符的宏参数和其它内容连接生成一个新标识符

条件编译指编译的时候从几组语句中选择一组编译而把其他组隐藏

#ifdef/ifndef/...#else...#endif
这样的结构可以根据一个宏是否被定义过从两组语句中选择一组进行编译
---------------------------------------------------------
  1 #include <stdio.h>
  2 #define ONE
  3 int main()
  4 {
  5 #ifdef  ONE   //如果定义过这个宏则编译这句话
  6         printf("1\n");
  7 #else
  8         printf("2\n");
  9 #endif
 10         return 0;
 11 }
---------------------------------------------------------
#if...#elif(n次)...#else(可有可无)...#endif
以上语句根据布尔值从多组语句中选择一句编译
编写布尔值时可以用多种逻辑操作符
---------------------------------------------------------
多文件程序编写过程中某个函数必须完整的属于某个文件
一个文件中可以包含多个函数

以.h作为扩展名的文件叫头文件,它们用来把多个.c源文件连接在一起
每个.c源文件有一个配对的.h头文件  .c源文件中所有函数的声明语句都应该在.h文件中写出
如果一个.c源文件中调用了某个.h头文件中声明的函数则也应使用#include预处理指令把它包含进来

编译多文件程序时可以在gcc命令后加上所有.c源文件名

头文件中的内容要包含在条件编译的框架内

如果一个源文件中需要使用另外一个源文件中声明的全局变量则需要使用extren关键字再次把这个变量声明一次
静态全局变量不可以被其他文件中的语句使用。
Makefile用来记录一个程序的整个编译过程

结构体是由多个普通变量组合构成的
结构体中普通变量的类型可以不同
结构体只是一种数据类型
结构体仅仅描述了变量之间的关系,在程序运行时结构体并不存在
使用结构体可以声明结构体变量,在程序运行过程中结构体变量是存在的

声明结构体的时候需要使用关键字struct
结构体声明语句中并不真正生成变量
结构体声明语句中可以直接声明结构体变量
单独声明结构体变量时需要使用struct关键字和结构体名称来表示数据类型
#include <stdio.h>
struct node
{
 int num;
 char buf[10];
 double dnum;
};
typedef struct node node;   //使用这句话可以在声明的时候省略struct
int main()
{
 struct node node2;
 node node3;
 return 0;
}

结构体声明可以放在头文件中
在C语言中结构体声明里不可以包含函数声明

typedef关键字可以用来给一个已经存在的数据类型起别名

给数据类型起别名的时候应该使用typedef关键字而不应该使用宏

可以采用数组初始化语法初始化结构体变量

可以使用结构体变量名称后边加.再加子变量名称的方法表示结构体变量中的某个子变量

同类型的结构体变量之间可以直接复制

结构体变量可以作为函数的形参和返回值使用,但是通常不这么做,因为浪费时间和空间
使用结构体指针作为函数的形参和返回值可以避免时间和空间上的浪费
使用结构体指针作为函数形参时能加const就尽量加const关键字
void midpt(const pt *p_pt1,const pt *p_pt2,pt *p_mid)
{
 p_mid->x=(p_pt1->x + p_pt2->x) / 2;
 p_mid->y=(p_pt1->y + p_pt2->y) / 2;
}
在结构体指针变量后边使用->操作符表示结构体变量内部的子变量

预习:
 1.结构体的对齐和补齐
 2.联合和枚举
 3.动态内存分配
作业:
 1.计算屏幕上一个矩形的面积
 2.使用结构体改写人员信息管理系,实现记录人员信息的功能。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值