linux c 预处理和结构体

来源:互联网 发布:淘宝会员数量 编辑:程序博客网 时间:2024/05/29 12:52
1.预处理有哪些类型?

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

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

条件编译是C语言中预处理部分的内容,它是编译器编代码时最先处理的部分,。条件编译里面有判断语句,如#if,#else,#endif。它的意思是如果宏条件如果符合,就编译这段代码,否则,编译器就忽略这段代码而不编译。

if语句则不然,ifC语言中的关键字,它根据表达式的计算结果来决定执行哪个语句,它里面的每个分支都编译过了的。

简单点讲,条件编译是根据宏条件选择性编译语句,它是编译器在编译代码时完成的;

条件语句是根据条件表达式选择性地执行语句,它是在程序运行时执行的。

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) 定义在函数(代码块)内部:局部有效(从定义类型的那行开始,一直到代码块结束)

不允许对结构体进行自身递归定义。

结构体内可以包含别的结构体。

只有在定义结构体变量时才会进行内存空间分配。

  
原创粉丝点击