Chinaunix首页 | 论坛 | 博客
  • 博客访问: 175450
  • 博文数量: 38
  • 博客积分: 638
  • 博客等级: 下士
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-07 17:16
文章分类

全部博文(38)

文章存档

2013年(1)

2012年(5)

2011年(32)

分类: C/C++

2011-11-25 10:27:13

1. #include的实质是什么? 
答:将引入文件内容替换到#include所在当前行。 

 2. #include “”与<>有何区别?如何验证你的结论?
 答:1.“”是指示编译器先在当前工作目录下收搜目标文件,如果找不到就的话再到开发环境设置好的标准路径下去找。
        2. <>是指示编译器在开发环境设置的路径下去查找目标文件。 在当前目录下自定义一个头文件stdio.h,里面有句#warning,然后用#include “stdio.h”,如果编译出现#warning,说明先在当前目录下收索目标文件;然后用#include ,如果编译没出现#warning,则说明去开发环境设置好的路径下去搜索目标文件;然后把自定义的stdio.h删去,用#include “stdio.h”,如果没出现#warning。则说明在当前目录搜索不到目标文件,再去开发环境设置好的路径去搜索目标文件。 

 3. 被#include的header file中最常见的内容可分为哪几类? 
答:宏定义、函数声明、数据类型定义

 4. 如何防止重复#include?(更确切的表述为“重复#include时如何防止重复定义/声明?”)需要说出2种方案,并说明各自的优缺点。
 答:1.#ifndef......#endif //show.h #ifndef __SHOW_H #define __SHOW_H #include #endif //a.h #ifndef __SHOW_H #define __SHOW_H #include #endif 优点:可以保证只编译一次#include 目标文件,编译器都支持。 缺点:定义宏时可能会宏名冲突,可能导致目标文件不被编译。
 2.#pragma once 优点:同一个目标文件只编译一次。 缺点:旧版的编译器不能识别,兼容性差。

 5. #define的实质是什么?如何使用#define
 答:1.简单替换。2注意空格 #define SHOW 123

 6. #与##分别有作用?如 #define M(x) #x #define M(x, y) x##y 
答:#define M(x) #x 将括号中x变为字符串, M(x) #x 展开后是“x”。 #define M(x, y) x##y 是将##左右两边的字符简单连接,这里是把x,y 合并成xy

 7. 例举你所知道的C语言built-in的macro。最好能指出其中哪些是特定compiler的扩展
 __LINE__ __FILE__ __DATE__ __TIME__ __func__ (__FUNC__) 
compiler:__WIN32__ __LINUX__ __TIME__ __DATE__ __FILE__ __LINE__ 

 8. 如何使用typedef,typedef与#define有何区别? 
答: typedef int INT; int main() { INT a = 100; return 0; } typedef定义数据类型 typedef unsigned int __u32; #define _INT int* _INT a, b; #define定义宏,是没有数据类型的,只是在预处理是进行简单替换 

9. #if和#ifdef的区别?如何使用复合条件?如下面的用法是否下确? #ifdef A && B 
答: #ifdef A等价于 #if defined(A), 所以#ifdef的成立条件是之前用#define A #if后接表达式,当条件为真,则编译;反之,不编译。 #if A && B #if defined(A) && defined(B)

 10. 你如何使用#warning和#error?
 答: #waring 只是输出警告信息,继续编译。 #error输出错误信息,退出编译。

 11. 以max(x, y)为例,说明#define与inline有何区别 
答: #define定义宏,inline是修饰函数,只有在需要用到的时候才像宏一样展开。 #define定义的宏不需要指明数据类型,inline修饰的函数的返回值和参数需要指明数据类型。inline修饰的函数的参数在编译的时候就需要确定值。 
#define max(x, y) ((x) > (y) ? (x) : (y)) 
int inlene max(int x, int y) 
{
      return x > y ? x : y; 
}
阅读(1945) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~