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 ...
随机推荐
- Linux下系统监控工具nmon使用
Mongodb安装在Centos7或以上的版本,对于系统的监控方法如下: 1.从\\10.10.10.1\ShareDoc\User\Zchen\linux系统监控下下载2个工具 nmon16e_mp ...
- [转]【鹅厂网事】全局精确流量调度新思路-HttpDNS服务详解
小编:对于互联网,域名是访问的第一跳,而这一跳很多时候会“失足”,导致访问错误内容,失败连接等,让我们在互联网上畅游的爽快瞬间消失,而对于这关键的第一跳,鹅厂也在持续深入研究和思考对策,今天小编就邀请 ...
- Tomcat反带和集群
Nginx|Apache反带用户请求到Tomcat LNMT: client -->http --> nginx --> reverse_proxy --> http --&g ...
- echo 的部分用法
echo “内容” > 文件名 (会覆盖文件里的所有内容) echo “内容” >> 文件名 (追加内容到文件里,会另起一行写入) 如果您阅读过此文章有所收获,请为我顶一个,如果文章 ...
- 减小SSN影响
单板级SSN 从单板级来看,芯片中多个逻辑门同时翻转时,将从单板电源和地平面瞬间汲取较大的电流.任何电源分配系统都存在着阻抗,特别是感抗,导致在短时间内电压调整模块来不及供应这些电流,从而在单板和电源 ...
- 模块化方案esl以及amd的依赖方式
来自AMD设计思想的总结和思考 在之前了解es6模块化的时候有遇到过依赖循环的问题,在es6中对于模块是引用性的,而当时于es6模块化做对比的commonjs(CMD规范)对于模块是值类型(会将其缓存 ...
- Python运行错误解释
BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIte ...
- Mysql教程:[1]下载安装配置详细教程
如果不小心你下载了免安装的mysql,那么你比较倒霉,你找不到setup文件,还得自己去配置很多东西,然后再使用命令安装.所以我今天呢写一篇教程,写的尽量详细,即便是菜鸟也能安装,我自己安装过很多遍了 ...
- hibernate 单元测试
单元测试 测试 dao service action package com.kaishengit.test; import org.hibernate.Session; import com.ka ...
- pa14-30条职场经验
可以说是很多本厚厚的职场经验书籍的精华部分,掌握了这30条可以说是天下无敌了,但真要掌握这30条经验可不是什么容易的事情,他们都是环环相 扣的,一条做不好可能有些能做好的项目就会落空,耐下性子,看看你 ...