linux c学习—— 预处理和结构体

1.预处理有哪些类型?

C语言提供多种预处理功能,主要处理#开始的预编译指令,如宏定义(# define),文件包含(# include),条件编译(# ifdef)等(以*开头的都是预处理命令)。

2.条件语句和条件编译有什么区别?

条件编译是C语言中预处理部分的内容,它是编译器编代码时最先处理的部分,。条件编译里面有判断语句,如#if,#else,#endif。它的意思是如果宏条件如果符合,就编译这段代码,否则,编译器就忽略这段代码而不编译。
if语句则不然,if是C语言中的关键字,它根据表达式的计算结果来决定执行哪个语句,它里面的每个分支都编译过了的。
简单点讲,条件编译是根据宏条件选择性编译语句,它是编译器在编译代码时完成的;
条件语句是根据条件表达式选择性地执行语句,它是在程序运行时执行的。

3.宏参数的前面加一个#是什么意思?

意为将一个宏参数输出时,对其进行字符串化处理,即在其两端各加一个双引号。

4.两个##是什么意思?

()##是连接符,用来将两个Token连接为一个Token。这里连接的对象Token,不一定是宏的变量。

5.如何定义一个结构体?

1).定义一个结构体时,同时定义该种类型的变量。
2).先定义一个结构体类型,在定义该类型的变量。
3).用类型定义符typedef给结构体命别名,再用这个别名定义结构体变量。

6.如何引用结构体变量中的成员?

1):结构体变量名.成员名
2):结构体指针变量->成员名

7.宏定义和typedef的使用有什么区别?

1).执行时间不同:typedef在编译阶段有效,由于在编译阶段,typedef有类型检查的功能,#define发生在预处理阶段,只进行监督的字符串替换,不会进行任何检查
2).功能有差异:typedef用来定义类型的别名,定义与平台无关的数据类型,与struct的结合使用等;#define不只是可以为类型取别名,还可以定义常量,变量,编译开关等作用域不同:#define没有作用域的限制,只要是之前预定义过的宏,在此后的程序中都可以使用,而typedef有自己的作用域
二者修饰指针类型时,作用不同

8.位段为什么不能进行取地址操作?

因为没有称作为“位段指针”类型的变量。

9.位段存储单元是如何定义的?

一个位段必须存储在同一存储单元中,不能跨两个单元。如果第一个单元空间不能容纳下一个位段,则该空间不用,而从下一个单元起存放该位段 。

10.定义结构体需要注意什么?

结构体类型的作用域
1) 定义在函数外面:全局有效(从定义类型的那行开始,一直到文件结尾)
2) 定义在函数(代码块)内部:局部有效(从定义类型的那行开始,一直到代码块结束)
不允许对结构体进行自身递归定义。
结构体内可以包含别的结构体。
只有在定义结构体变量时才会进行内存空间分配

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值