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 ...
随机推荐
- pdp 的连接方法
<?php $dsn = "mysql:host=127.0.0.1;dbname=blog_edu"; try{ $pdo = new PDO($dsn,'root','' ...
- 转载:Java就业企业面试问题-电商项目
转载: http://blog.csdn.net/qq_33448669/article/details/73657642
- 调整 WiFi 驱动设置让 WiFi 信号更稳定
调整 WiFi 驱动设置让 WiFi 信号更稳定 修改 WiFi 驱动中 的设置,将 Power Saving Mode 的值改为 CAM.
- linux find -regex 使用正则表达式
find之强大毋庸置疑,此处只是带领大家一窥find门径,更详细的说明见man find和 info find.整篇文章循序渐进,从最常用的文件名测试项开始步步深入,到第六节基本讲完find处理文件 ...
- Azure通过Vnet Peering和用户自定义路由(UDR)实现hub-spoken连接
Azure的Vnet Peering可以把Azure中不同的Vnet连接起来的技术.底层是通过对NVGRE的租户标签进行修改,实现了不同租户间的互通.这种技术非常类似传统网络中MPLS/VPN不同租户 ...
- CodeForces 620E:New Year Tree(dfs序+线段树)
E. New Year Treetime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputout ...
- 机器学习:集成学习(Bagging、Pasting)
一.集成学习算法的问题 可参考:模型集成(Enxemble) 博主:独孤呆博 思路:集成多个算法,让不同的算法对同一组数据进行分析,得到结果,最终投票决定各个算法公认的最好的结果: 弊端:虽然有很多机 ...
- Java-API-POI-Excel:HSSFWorkbook Documentation
ylbtech-Java-API-POI-Excel:HSSFWorkbook Documentation 1.返回顶部 1. org.apache.poi.hssf.usermodel Class ...
- AngularJS:HTML DOM
ylbtech-AngularJS:HTML DOM 1.返回顶部 1. AngularJS HTML DOM AngularJS 为 HTML DOM 元素的属性提供了绑定应用数据的指令. ng-d ...
- QQ控件时光轴特效总结
1.插入HTML数据 插入html代码,一般的做法是通过document.getElementById("").innerHTML来实现. 然而在该控件中,它通过JS replac ...