关于预处理和结构体

关于预处理和结构体
  还记得之前学习GCC编译的过程吗,第一步就是预处理,展开#开头的文件,(gcc -E test.c -o test.i),预处理是C语言的一个重要功能,它由预处理程序负责完成。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分进行处理,处理完毕自动进入对源程序的编译。
  首先提到的第一个预处理功能就是文件包含,因为最近写的一些代码开头都是文件包含。最最常用最最基本的就是#include <stdio.h>这条了,还有一些其他的例如#include <string.h>、#include <stdlib.h>等等,这里的“< >”也可以用""来替换,但这两种形式是有区别的,使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找;使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。用户编程时可根据自己文件所在的目录来选择一种命令形式。一个include命令只能指定在一个被包含文件,若有多个文件要包含,则需要多个include语句实现。文件包含允许嵌套。
  接着就是宏定义#define,宏定义是有源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的,在C语言中,宏分为有参数和无参数两种。关于宏定义主要要注意几点,第一,宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的替换,字符串中可以含有任何字符,可以是常数,也可以是表达式,预处理程序并不会作任何检查。第二,宏定义不是说明或者语句,不需要加分号,或者说预处理都不需要加分号,若宏定义加了分号,则连分号一起定义并替换。第三,宏定义必须写在函数外面,作用域为宏定义命令起到程序结束,如要终止宏定义的作用域则需要使用"#undef"命令。第四,宏名在源程序中若用引号括起来,则不会替换。第五,宏定义允许嵌套,在宏定义的字符串中可以出现已经定义的宏名,最后,可以通过对“输出格式”作宏定义来减少书写麻烦。再一些补充就是带参数的宏定义中,形参不会分配内存空间,所以不用作类型定义,而在调用宏定义时,只是简单的符号替换并不存在值传递的过程,宏定义的形参是标识符,而实参可以是表达式。
  简单的介绍一些预处理命令后,再来提一提结构体。什么是结构体?strcut是一个神奇的关键字,他将一些有关联的数据打包成一个整体,方便使用。结构体的理解和数组比较类似,都是由多个元素组成,各个元素在内存的存储空间是连续的,不同的是,数组中的元素类型都是一样的,而结构体中的元素类型可以不一样,所以结构体可以打包很多有关联的数据,总之struct在使用起来的时候会很方便,使用struct的熟练程度与编程做项目的经历有关,所以经验越足,写的东西也会越来越好,希望在日后的学习中能够不断积累吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值