预处理和结构体的问题
来源:互联网 发布:ubuntu卸载不了软件 编辑:程序博客网 时间:2024/06/06 19:21
1. 文件包含中重复包含,编译是否会显示出错?
当重复包含头文件,有可能会出现重复定义变量,编译器在进行编译的时候对于重复定义的变量不知道调用哪一个。比如定义了int a=0;又重复定义了int a=1;如果使用这个a,编译器就不知道使用的a等于0还是1,所以编译器不允许出现重复定义,也就不允许重复包含头文件。上面的问题无法通过边缘,容易解决。如果写法不好,造成不被编译发现的问题才是头大,例如:在头文件中定义了全局静态变量,编译后实际在每个引用此头文件的obj中都会有一份,逻辑就混乱了。
2. 预处理有哪些类型?
C语言提供多种预处理功能,主要处理#开始的预编译指令,如宏定义(# define),文件包含(# include),条件编译(# ifdef)等
3. 条件语句和条件编译的区别在哪?
条件编译是C语言中预处理部分的内容,它是编译器编代码时最先处理的部分,。条件编译里面有判断语句,如#if,#else,#endif。它的意思是如果宏条件如果符合,就编译这段代码,否则,编译器就忽略这段代码而不编译。
if语句则不然,if是C语言中的关键字,它根据表达式的计算结果来决定执行哪个语句,它里面的每个分支都编译过了的。
简单点讲,条件编译是根据宏条件选择性编译语句,它是编译器在编译代码时完成的;
条件语句是根据条件表达式选择性地执行语句,它是在程序运行时执行的。
4. ##连接的token到底是什么?
预处理运算符##为宏扩展提供了一种连接实际变元的手段如果替换文本中的参数用##相连,那么参数就被实际变元替换,##与前后的空白符被删除,并对替换后的结果重新扫描。
例如:#define paste(front,pack) frong##pack
从而宏调用paste(name,1)的结果是建立单词name1
5. 结构体的有效对齐和自身对齐该如何理解?
结构体的自身对齐值:其成员中自身对齐值最大的那个值;
结构体有效对齐值:自身对齐值和指定对齐值中小的那个值
6. 宏定义和typedef的使用有什么区别要注意?
执行时间不同:typedef在编译阶段有效,由于在编译阶段,typedef有类型检查的功能,#define发生在预处理阶段,只进行监督的字符串替换,不会进行任何检查
功能有差异:typedef用来定义类型的别名,定义与平台无关的数据类型,与struct的结合使用等;#define不只是可以为类型取别名,还可以定义常量,变量,编译开关等作用域不同:#define没有作用域的限制,只要是之前预定义过的宏,在此后的程序中都可以使用,而typedef有自己的作用域
二者修饰指针类型时,作用不同
7. 位段为什么不能进行取地址操作?
不可以取位段地址。因为在这种情况下,显然没有称作为“位段指针”类型的变量
8. 位段存储单元是怎么定义的?
一个位段必须存储在同一存储单元中,不能跨两个单元。如果第一个单元空间不能容纳下一个位段,则该空间不用,而从下一个单元起存放该位段
9. 类(对象)是什么?
类和对象是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。它们的关系是:对象是类的实例,类是对象的模板。对象是通过new classname产生的,用来调用类的方法,
10. 条件编译能否使用嵌套?
条件编译语句块与函数定义体之间不存在相互嵌套时,所含的#include,#define语句块甚至是被嵌套下级条件编译语句块,按照语句块嵌套的排版方式进行缩进排版
- 预处理和结构体的问题
- 预处理和结构体2
- 关于预处理和结构体
- #pragma预处理分析 和 struct 结构体大小的计算
- C语言预处理、结构体和make的使用--C语言预处理命令
- 09-结构体指针和预处理指令
- linux c 预处理和结构体
- 预处理,结构体
- 预处理与结构体
- 预处理、结构体预习
- 预处理、结构体
- 预处理,结构体
- 第七章预处理与结构体十个问题及解答
- OC-局部变量和全局变量、结构体、预处理指令以及关键字的基本使用
- C语言预习笔记(预处理和结构体)
- linux c学习—— 预处理和结构体
- 有关预处理的问题
- 预处理CComModule的问题
- mysql sql语句优化建议
- Django项目创建流程
- 判断文件是否被恶意篡改
- WebUploader 上传插件选择上传文件按钮无效问题
- 【bzoj1085】【 [SCOI2005]骑士精神】启发式剪枝+迭代加深搜索
- 预处理和结构体的问题
- 图片上传两次,ajax上传2次解决方案
- mac os快速切换多个php版本
- 使用gradle指令运行测试脚本
- CSS3中text-overflow支持以...代替超出文本
- Mongoose populate方法
- 使用sklearn进行集成学习——理论
- c primer plus 第十章编程题
- java基础复习一:int与Integer