linux c 预处理和结构体
来源:互联网 发布:淘宝会员数量 编辑:程序博客网 时间:2024/05/29 12:52
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) 定义在函数(代码块)内部:局部有效(从定义类型的那行开始,一直到代码块结束)
不允许对结构体进行自身递归定义。
结构体内可以包含别的结构体。
只有在定义结构体变量时才会进行内存空间分配。
- linux c 预处理和结构体
- linux c学习—— 预处理和结构体
- 学习Linux C编程之预处理与结构体
- C语言-预处理、结构体
- C语言预处理、结构体和make的使用--C语言预处理命令
- C语言预习笔记(预处理和结构体)
- 预处理和结构体2
- 关于预处理和结构体
- C语言08字符串 & 预处理 & 结构体
- C语言字符串 & 预处理 & 结构体八
- 09-结构体指针和预处理指令
- 预处理和结构体的问题
- C语言热身——预处理指令、变量类型、static和extern、结构体、枚举
- Linux C 预处理详解
- Linux C 预处理详解
- 【C语言学习笔记】结构体、枚举、预处理指令
- C语言第十章:结构体、枚举、预处理指令
- c语言———预处理,结构体
- Opencv 2.4.9在Ubuntu下的配置安装
- Java中的overload和override的区别
- 初学Qt:QLineEdit设置为不可编辑
- 习题3(3.2)
- 信息学奥赛一本通(C++版) 第三部分 数据结构 第一章 栈
- linux c 预处理和结构体
- 用汇编的眼光看C++(之拷贝、赋值函数)
- linux学习之查看linux系统
- 51nod1596-二进制&输入挂-搬货物
- 如何通过 USB 设备来安装 CentOS
- Transaction
- 最基本的快速幂
- 数据库笔试题
- gets() fgets()