C++程序设计基础(1)程序的编译和执行
注:读《程序员面试笔记》笔记总结
1.编译执行过程
1.1预处理:
(1)所有以#开头的代码都属于预处理的范畴:#include,#define,#ifdef(#ifndef,#endif),#other(其他宏指令)
(2)处理预定义的宏:例如__DATA__,__FILE__(前后都是两个下划线)
(3)用一个空格代替连续的注释
(4)处理三元符:例如将??=替换成#(针对很古老的键盘,现在一般较少出现)
1.2编译:
对预处理后的代码进行词法、语法、语义分析,生成汇编代码(.s)
1.3汇编:
将汇编代码生成机器指令,生成目标文件(.o)
1.4链接:
和其他的目标文件以及库文件生成可执行程序
2.面试题
2.1简述#include<>和#include" "的区别
答案:#include直接从编译器指定的路径进行搜索,找不到则报错;
#include“ ”则先从程序所做目录进行搜索,然后再到编译器指定路径进行搜索,(自定义的此种方式合适),搜索不到报错。
2.2简述#和##在define中的作用
答案:宏定义中的#运算符将其后面的参数转换成字符串;
宏定义中的##运算符将其前后的参数进行字符串连接。
1 #define PRINTCUBE(x) cout<<"cube("<<#x<<")="<<(x)*(x)*(x)<<endl; 2 3 PRINTCUBE(5); 4 5 //output: 6 //cube(5)=125 7 8 #define LINK3(x,y,z) x##y##z 9 10 LINK3(3,5,0) 11 12 //output: 13 //"350"
2.3简述assert断言的概念
答案:assert用于程序的DEBUG版本中检测条件表达式,如果结果为假,则输出诊断信息并终止程序。
注意点:(1)assert是一个带参数的宏,不是一个函数;
(2)在#include语句前加入#define NDEBUG则禁用assert宏(即含有assert的语句都会被忽略);
(3)在RELEASE中assert会被忽略(即含有assert的语句都会被忽略);
(4)一个assert最好只有一个条件判断语句;
1 //修改前 2 assert(grade>0 && grade<=6); 3 //修改后 4 assert(grade>0); 5 assert(grade<=6);
(5)在assert中不要去修改变量的值,否则在RELEASE中被忽略掉,造成结果不同;
1 //修改前 2 assert(success++>60); 3 //修改后 4 assert(success>60); 5 success++;
(6)对用户的参数输入判断时,使用if语句来参数合法性检测,不要用assert。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
java对象的强引用,软引用,弱引用和虚引用
1,杂谈 在Java中,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了。 小编转眼已经做开发很多年了,在帝都生活都快跟不上生活节奏了,伴随物价、工作的变动几乎没2年都会搬家一次,日常用品也会越来越多搬家也就越来越麻烦,记得最近的一次搬家专门找了一辆金杯把里面都塞满了,新家虽然比原来住的地方大了点,但是仍然空间有限啊。先说说开始准备搬家的时候先整理了一下内务(打包、清理垃圾)。 前一天把这些年的所有日常用品、生活用品都整理出来了,一些经常喜欢穿的衣服、鞋子啊虽然都买了很长时间了,还是把他们打包搬走了,搞不好明天就想穿上了。 再就是一些不知道什么时候可能被穿一次的衣服,真是取舍两难啊,最后决定如果打包的箱子能装下带走,装不下的话就当垃圾扔掉了。 还有一些长时间没出现在我眼前的东东,直接被我垃圾扔掉了,再也不会使用了,占地方。 从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用...
- 下一篇
jvm原理解析——不疯魔不成活
摘要: 作为一名java开发人员,如果有人问你java是什么?java是如何运行的?你该如何回答,事实上java是有Java语言、class文件、jvm、Java API共同组成。 java程序运行 *.java文件-->编译器-->*.class文件-->线程启动(main)-->jvm-->操作系统-->硬件 通过上面的流程我们可以看出java程序的执行顺序,那么jvm到底是什么,class文件到底是如何在jvm中运行就显得很重要了。 jvm原理 什么是jvm openjdk源码地址http://hg.openjdk.java.net/jdk9 JVM是一个计算机模型,JVM对Java可执行代码,即字节码(Bytecode)的格式给出了明确的规格。这一规格包括操作码和操作数的语法(也就是cpu指令集)和数值、标识符的数值表示方式、以及Java类文件中的Java对象、常量缓冲池在JVM的存储映象。 JVM的组成 JVM指令系统、JVM寄存器、JVM 栈结构、JVM 碎片回收堆、JVM 存储区 JVM指令 Java指令也是由操作码和操作数两部分组成,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7设置SWAP分区,小内存服务器的救世主
- Hadoop3单机部署,实现最简伪集群
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题