C++面试笔记--宏定义
- 宏定义是一个比较常考的考点,所以我归纳总结了一下近年的宏定义的题目
- //宏定义面试题1.cpp
//What is the output of the following code?[中国台湾某著名杀毒软件公司2005年10月面试题]#include<stdio.h>
#define SQR(x) (x*x)
void main()
{
int a,b=;
a=SQR(b+);
printf("/n%d",a);
}//A. 25 B.11 C.Would vary from compiler to compiler D.Error
//B
//宏定义展开时容易造成二义性问题。a=SQR(b+2)这一语句展开后为“b+2*b+2”,而并不是想象中
//的“(b+2)*(b+2)”.要是想得到这个结果,必须把宏定义语句改成如下的形式:
//#define SQR(X) ((x)*(x))
//这样结果就是25 宏定义面试题2.cpp
用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)。
[美国某著名计算机嵌入式公司2005面试题]解析:
通过这道题面试官想考几件事情:#define语法的基本知识(例如,不能以分号家属,括号的使用,等等)。
要懂得预处理器为你计算常数表达式得值,因此,写出你是如何计算一年有多少秒而不是计算出实际的值,
会更有意义。意识到这个表达式中用到UL(表示无符号长整型),那么你就有了一个好的起点。记住,第一印象很重要。而且最重要的是,计算结果超过了65535这个16位的整型大小的范围,必须使用长整型L。
#define SECOND_PER_YEAR (60*60*24*365)UL (or Ul or uLor ul)
//宏定义面试题3.cpp
//写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。
//[美国某著名计算机嵌入式公司2005面试题]//解析:
//这个测试是为下面的目的而设的://标识#define在宏中应用的基本知识。这是很重要的,因为直到嵌入(inline)操作符变为C的一部分,宏都是方便地产生
//嵌入代码的唯一方法。对于嵌入式系统来说,为了能达到要求的性能,潜入代码经常是必须的方法。//三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比 if-then-else更优化的代码。何计算一年有多少秒而不是计算出实际的值,
//了解这个用法是很重要的。//懂得在宏中小心地把参数用括号括起来。号长整型),那么你就有了一个好的起点。记住,第一印象很重要。
#define MIN(A,B) ((A)<=(B)?(A):(B))
C++面试笔记--宏定义的更多相关文章
- iOS开发笔记--宏定义的黑魔法 - 宏菜鸟起飞手册
宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在 ...
- c c++面试c工程开发之宏定义和条件编译
多数c语言的初学者对c工程开发过程各个阶段的作用理解不到位,而这方面的的知识又是实际开发过程中经常用到的技能点,所以就成为面试考察中一个重要的考察方面.例如:头文件的作用.头文件的内容:链接的作用和意 ...
- C++面试常见问题——01预处理与宏定义
C++面试常见问题--------01预编译和宏的使用 C++预处理器 预处理器是一些指令,它将指示编译器在实际编译之前需要完成的预处理.预处理必须要在对程序进行词法与语义分析.代码生成与优化等通常的 ...
- 面试问题5:const 与 define 宏定义之间的区别
问题描述:const 与 define 宏定义之间的区别 (1) 编译器处理方式不同 define宏是在预处理阶段展开: const常量是编译运行阶段使用: (2) 类型和安全检查不同 ...
- Linux学习笔记——举例说,makefile 添加宏定义
0.前言 从学习C语言開始就慢慢開始接触makefile,查阅了非常多的makefile的资料但总感觉没有真正掌握makefile.假设自己动手写一个makefile总认为非常吃力. 所以特意 ...
- 读书笔记 effective c++ Item 2 尽量使用const,枚举(enums),内联(inlines),不要使用宏定义(define)
这个条目叫做,尽量使用编译器而不要使用预处理器更好.#define并没有当作语言本身的一部分. 例如下面的例子: #define ASPECT_RATIO 1.653 符号名称永远不会被编译器看到.它 ...
- C语言学习笔记--C语言中的宏定义
1. C 语言中的宏定义 (1)#define 是预处理器处理的单元实体之一(因此,预处理器只是简单的进行替换,并不(2)#define 定义的宏可以出现在程序的任意位置(包括函数体的内部)(3)#d ...
- 标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用
预处理:也就是包括须要的头文件,用#include<标准头文件>或#include "自己定义的头文件" 宏定义,如:#define PI 3.1415926 查看用宏 ...
- 《linux 内核全然剖析》 笔记 CODE_SPACE 宏定义分析
在memory.c里面.遇到一个宏定义,例如以下: #define CODE_SPACE(addr) ((((addr)+4095)&~4095) < \ current->sta ...
随机推荐
- 使用jsonp跨域调用百度js实现搜索框智能提示(转)
http://www.cnblogs.com/oppoic/p/baidu_auto_complete.html 项目中常常用到搜索,特别是导航类的网站.自己做关键字搜索不太现实,直接调用百度的是最好 ...
- 转载:jquery插件实现图片延迟加载(lazyload.js)
转载: http://www.cnblogs.com/tinyphp/archive/2013/04/09/3009385.html
- centos7 showdoc 安装部署
1.进入showdoc官网帮助目录下 https://www.showdoc.cc/web/#/help?page_id=828455960655160 阅读自动安装部署相关事项: 2.利用xshel ...
- unity shader 内置变量
官网Manual:http://docs.unity3d.com/Manual/SL-UnityShaderVariables.html unity提供大量的内置变量,来供我们使用,主要包括一些 :矩 ...
- docker镜像的导入和导出
启动命令 docker run -d -p 3000:80 twang2218/gitlab-ce-zh:9.0.3 docker run -d -p 8080:80 gitlab/gitlab-ce ...
- hihoCoder1296:约瑟夫问题
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho的班级正在进行班长的选举,他们决定通过一种特殊的方式来选择班长. 首先N个候选人围成一个圈,依次编号为0.. ...
- 深入浅出 消息队列 ActiveMQ------增强版
本小节我们将讲解Apache开源下的ActiveMQ,而ActiveMQ是JMS的一个具体实现.JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于 ...
- 怎么设置myeclipse的格式化键格式每行的字符长度
MyEclipse 格式化代码调整每行长度默认每行是80~对于咱初学者,非敏捷型编码者来说~有点短以至于Ctrl+Shift+F 格式化代码后总把一行拆成两行或者更多有点不适应 所以按个人爱好 更改他 ...
- java--构造器与static
原本无显示编码构造器,则有一个默认的隐式(隐藏的无参构造器),但是,当显示指定了构造器,则这个默认隐式的构造器将不存在,比如此时无法new无参的构造器(除非显示地编写声明无参的构造函数). 如果子类构 ...
- 手机的RAM和ROM
RAM是由英文Random Access Memory的首字母构成的,意为随机存储器,即在正常工作状态下可以往存储器中随时读写数据.根据存储单元工作原理的不同,RAM又可分为静态存储器(SRAM)和动 ...