面试中最容易的比当属define这个东西我们平时写代码用来定义字面常量吧。
const和define(5点区别) 快省内存
首先对于这个而言define定义的叫字面常量,预处理时候就进行替换,不占任何内存空间。编译时期有多个拷贝。内存有多分。并且并不会进行任何类型的检查。他的错误只有在编译时期才会体现。不产生任何符号在符号表。
而对于const而言他在C++语言叫const int a=5常量c语言叫只读 变量我主要拿他和c++中的比较 首先在c++中常量是在编译时期替换内存中只有一份拷贝。要进行类型检查。其次。const最重要的一点如果是常量。他也是有内存。只是编译器在看到是常量,会放到常量表中。后面遇到后直接替换。所以你也可以这样说他是在编译时替换的。
inline 和define 快 并且有类似于模板一样的能力(5)
对于这两比较主要是在函数上体现。define预处理时候替换,内存中有多份拷贝。对于参数的类型不做任何的检查。并且因为它不是函数,无法对其进行调试。define可能会出现奇怪的现象
对于inline而言它是对编译器进行建议,有可能他不会展开。如果它可以展开。展开是在编译时期展开,并且因为他是函数他要对参数进行检查并且在debug模式下可以进行调试。不会出现奇怪的现象。
typedf和define (5)
首先万年老套路define是在预处理时候进行替换。不进行任何类型检查。编译时期才会发现错误
define不仅可以重新定义类型名并且可以作为编译开关字面常量。。。。宏函数作用域定义到撤销定义
typedef 少了好多他只是对一个已经有的类型进行重定义。作用于是限于定义他的作于域中编译时期。
对于定义常量指针类型define容易出现歧义
enum和define(参考const)
define和一般函数(参考inline)
总共这几种问题我们一种一种刨析。