注:读《程序员面试笔记》笔记总结

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。

转载于:https://www.cnblogs.com/ys99/p/9155175.html

C++程序设计基础(1)程序的编译和执行相关推荐

  1. java程序设计基础29_java程序设计基础实验29

    实验29 编写一个java程序,在程序中定义一个MyPlus类,MyPlus类有三个plus()方法,分别对不同的参数进行求和. //MyPlus.java classMyPlus { publici ...

  2. 计算机专业复试离散数学,2016年桂林电子科技大学计算机科学与工程学院210离散数学+程序设计基础之程序设计基础考研复试题库...

    一.选择题 1. 以下叙述中正确的是( ). A. 函数的返回值不能是结构体指针类型 B. 函数的返回值不能是结构体类型 C. 在调用函数时,可以将结构体变量作为实参传给函数 D. 结构体数组不能作为 ...

  3. 第一讲. C/C++程序设计基础

    第一讲. C/C++程序设计基础 1. 程序的基本结构 2.C/C++输入输出 2.1 C: 格式化输入输出 2.2 C++: 流(stream)的输入输出 3. 数组与结构体 3.1 数组定义 3. ...

  4. c语言程序设教材计 乌云高娃,C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt...

    C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt 主要内容 课程概述 为什么选择C语言作为入门课程? C语言 ...

  5. 周信东c语言实验二实验报告,周信东主编最新版C语言程序设计基础实验一实验报告.doc...

    周信东主编最新版C语言程序设计基础实验一实验报告.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我 ...

  6. c语言程序设计编辑与调试环境实验报告,01程序设计基础实验报告_C语言程序设计基础.doc...

    01程序设计基础实验报告_C语言程序设计基础 程序设计基础 实验报告 题 目: C语言程序设计基础 院 (部): 管理工程学院 专 业: 信息管理与信息系统 班 级: 信管101 姓 名: 张三 学 ...

  7. java语言仅支持单重继承_java语言程序设计基础篇习题_复习题_第十一章

    java语言程序设计基础篇习题_复习题_第十一章 11.1 下面说法是真是假?一个子类是父类的子集. 11.2 使用什么关键字来定义一个子类 11.3 什么是单一继承?什么是多重继承?java支持多重 ...

  8. 对c语言和程序设计基础的体会,C语言程序设计基础与应用

    <C语言程序设计基础与应用(高等院校计算机教育系列教材)>由刘丽.朱俊东.张航编著,本书内容由浅入深.循序渐进,介绍C语言的基本语法知识和程序设计等内容,同时兼顾了全国计算机等级考试二级C ...

  9. python语言程序设计2019版第二章课后答案-python语言程序设计基础课后答案第二章...

    python语言程序设计基础课后答案第二章 以下合法的用户自定义标识符是____________. 导入模块或者模块中的元素要使用关键字________ . 下列哪个函数是用来控制画笔的尺寸的____ ...

  10. python语言程序设计2019版第二章课后答案-python语言程序设计基础(嵩天)第二章课后习题...

    **第二学期第一周学习总结 一. 本周学习内容总结 一维数组,了解了一维数组的定义(定义一个数组,需要明确数组变量名,数组元素的类型和数组大小,即数组中元素的数量) 一维数组定义的一般形式为:类型名, ...

最新文章

  1. WIN下Nginx缓存加速配置方法
  2. 具有可执行Tomcat的独立Web应用程序
  3. python填空题_Python题库-填空题
  4. 使用NGUI来制作技能的CD冷却效果
  5. Asciidoc中缩进的使用
  6. 关于虚拟机virtualbox使用无线卡上网的设置
  7. javascript去除空格回车符
  8. PTA 判断素数 C语言非c++
  9. 学习纹理格式(DXGI_FORMAT 和 VkFormat)
  10. 吃猕猴桃,当然不不不不能错过贵州的啦
  11. c语言0x前缀的作用,有趣的问题,C语言程序中,为什么十六进制数字以前缀0x开头呢?...
  12. 讯飞智能录音笔SR502内存升级为32G,帮用户留住更多动听旋律
  13. Android应用开发--MP3音乐播放器界面设计(1)
  14. 使用响应扩展的响应面(Rx)
  15. 亚马逊Amazon 753和754详解
  16. qt开发是使用QT creator 还是用VS+qt?
  17. QQ空间视频下载详细教程(手机端)
  18. C语言考试知识点汇总(实践知识点)
  19. 微信如何批量添加好友?
  20. sort()函数实现从大到小排序

热门文章

  1. 用c#写的smtp邮件发送类
  2. 计算机上相同的用户,php会话为不同计算机上的不同用户发出相同的session_id
  3. Nginx源码分析 - 初探Nginx的架构(01)
  4. python语言程序设计实践教程陈东_《Python程序设计》(陈春晖)【摘要 书评 试读】- 京东图书...
  5. python linux开发_python之Linux开发环境安装
  6. 【渝粤教育】21秋期末考试组织行为学10068k2
  7. Docker系列(九)Docker的远程访问
  8. libmesh 思维导图(类接口设计)
  9. 怎么加入链接,可以让微信浏览器直接提示跳出另一个浏览器查看
  10. Linux之ssh无密码登录