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

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中的作用

答案:宏定义中的#运算符将其后面的参数转换成字符串;

宏定义中的##运算符将其前后的参数进行字符串连接。

 #define PRINTCUBE(x)    cout<<"cube("<<#x<<")="<<(x)*(x)*(x)<<endl;

 PRINTCUBE();

 //output:
//cube(5)=125 #define LINK3(x,y,z) x##y##z LINK3(,,) //output:
//"350"

2.3简述assert断言的概念

答案:assert用于程序的DEBUG版本中检测条件表达式,如果结果为假,则输出诊断信息并终止程序。

注意点:(1)assert是一个带参数的宏,不是一个函数;

(2)在#include语句前加入#define NDEBUG则禁用assert宏(即含有assert的语句都会被忽略);

(3)在RELEASE中assert会被忽略(即含有assert的语句都会被忽略);

(4)一个assert最好只有一个条件判断语句;

 //修改前
assert(grade> && grade<=);
//修改后
assert(grade>);
assert(grade<=);

(5)在assert中不要去修改变量的值,否则在RELEASE中被忽略掉,造成结果不同;

 //修改前
assert(success++>);
//修改后
assert(success>);
success++;

(6)对用户的参数输入判断时,使用if语句来参数合法性检测,不要用assert。

C++程序设计基础(1)程序的编译和执行的更多相关文章

  1. Java知识系统回顾整理01基础01第一个程序02命令行格式编译和执行Java程序

    一.先看运行效果 在控制台下运行第一个Java程序,可以看到输出了字符串 hello world 二.准备项目目录 通常都会在e: 创建一个project目录 在这个例子里,我们用的是e:/proje ...

  2. C#程序设计基础——常量

    C#程序设计基础——常量 常量是在编译时已知,并且在程序的生存期内不发生更改的不可变值.常量使用const修饰符进行声明. 常量必须在声明时初始化,且常量的类型必须为以下类型之一:sbyte/byte ...

  3. C语言程序设计基础知识点概括

    C语言程序设计基础知识点概括 C语言程序设计基础知识点1.函数是C语言的基本构成单位.main函数是C语言程序的唯一入口.2.C语言程序开发过程. 编译过程:将以.c或.cpp结尾的源程序文件经过编译 ...

  4. 程序设计基础·Java学习笔记·面向对象(下)

    Java程序设计基础之面向对象(下) (补充了上的一些遗漏的知识,同时加入了自己的笔记的ヾ(•ω•`)o) (至于为什么分P,啊大概是为了自己查笔记方便(?)应该是("` 3′") ...

  5. 原创 C++应用程序在Windows下的编译、链接:第三部分 静态链接(二)

    3.5.2动态链接库的创建 3.5.2.1动态链接库的创建流程 动态链接库的创建流程如下图所示: 在系统设计阶段,主要的设计内容包括:类结构的设计以及功能类之间的关系,动态链接库的接口.在动态链接库中 ...

  6. 原创 C++应用程序在Windows下的编译、链接:第二部分COFF/PE文件结构

    2.1概述 在windows操作系统下,可执行文件的存储格式是PE格式:在Linux操作系统下,可执行文件的存储格式的WLF格式.它们都是COFF格式文件的变种,都是从COFF格式的文件演化而来的. ...

  7. 原创 C++应用程序在Windows下的编译、链接:第一部分 概述

    本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 cl.exe是windows平台下的编译器,link.ex ...

  8. 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序

    如何用javac 和java 编译运行整个Java工程 (转载)  http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...

  9. 如何编写一个编译c#控制台应用程序的批处理程序

    如何编写一个编译c#控制台应用程序的批处理程序 2011-03-22 18:14 dc毒蘑菇 | 浏览 579 次 最近在网上看了一个教程,是学C#的,但是我的机子上装不上vs,所以想写一个批处理来编 ...

  10. C语言程序设计基础

    C语言程序设计基础 目录 C语言 C语言基础 C语言编程注意 C语言 C语言基础 C语言编程注意 0<9<9和0<9&&9<9是不同的 数组的声明和定义 con ...

随机推荐

  1. mysql 按照姓氏排序

    1.如果是gbk存储 order by name asc 2.非GBK order by convert(name using gbk) asc

  2. 浅谈Spring的两种配置容器

    浅谈Spring的两种配置容器 原文:https://www.jb51.net/article/126295.htm 更新时间:2017年10月20日 08:44:41   作者:黄小鱼ZZZ     ...

  3. Win10 的操作中心如果不见了

    Win10 的操作中心如果不见了,可能是因为设置了不在任务栏显示操作中心,可以按照下面的设置来恢复. 1.单击开始菜单栏,打开设置: 2.选择个性化: 3.下图中,在左边选择"任务栏&quo ...

  4. 「BZOJ 2809」「APIO 2012」Dispatching「启发式合并」

    题意 给定一个\(1\)为根的树,每个点有\(c,w\)两个属性,你需要从某个点\(u\)子树里选择\(k\)个点,满足选出来的点\(\sum_{i=1}^k w(i)\leq m\),最大化\(k\ ...

  5. IO模型《一》IO模型介绍

    IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞 ...

  6. activeMq延迟消息队列

    Long delay = 30 * 1000L; jmsTemplate.send(type.getValue(),new MessageCreator() { @Override public Me ...

  7. bzoj1070【SCOI2007】修车(费用流)

    题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...

  8. 6、C++共用体

    6.共用体 共用体(union)是一种数据格式,他能够存储不同的数据类型,但只能同时存储其中的一种类型.也就是说,结构可以同时存储int.long和double,共用体只能存储ing.long.dou ...

  9. 1、C++学习预备知识

    C++在C语言面向过程的编程的基础上增加了类代表的面向对象编程和模板支持的泛型编程. 过程性编程强调的是,算法的过程性,OOP(面向对象编程)强调的是数据,试图让语言来满足问题的要求.其理念是设计与问 ...

  10. sql随机插入数据--记录

    sql面试题中经常出现一张学生表,表字段有学生ID,学生课程,学生成绩 今天要实测,so,需要有数据,now,随机生成数据,,, create table student ( id ), --编号 c ...