文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>笔试题总结

笔试题总结

时间:2010-07-01  来源:maahier

1.1
#ifdef NDEBUG
#define TRACE(S) S
#else
#define TRACE(S) printf(”%s;\n”, #S); S
#endif

问:以上TRACE()宏的作用是什么?

1.1 这道题主要考察#的功能,S是一个表达式。TRACE()的作用就是在DEBUG状态下,计算表达式S的值之前先打印S。
 “#”把宏参数变成一个字符串,“##”把两个宏参数粘合在一起。 #define CONS(a, b)  int(a##e##b)          /*int(2e3)==2000*/
需要注意的是:当用宏作为另一个宏的参数时,凡宏定义里面有"#"和"##"的地方是不会再展开的。
#define NUM  (24)
#define STR(s)  #s
printf("%s", STR(NUM));                   /*就是printf("%s", "NUM");*/

要解决参数宏不展开的问题,可以添加一层中间转换层。加这层宏的用意是把所有的参数在这层里全面展开,那么在转换宏的那一个宏(_STR)就能得到正确的宏参数。换句话说,过程应该是,先替换掉所有的非含"#"("##")宏,最后实现"#"("##"),就不会出现含带"#"("##")宏参数的情况了。
#define NUM  (24)
#define _STR(s)  #s
#define STR(s)  _STR(s)
printf("%s", STR(NUM));                   /*就是printf("%s", "24");*/
                                          /*STR(NUM)-->_STR(24)-->"24"*/



1.2 #error的作用?

1.2 #error用于向编译器报错,并输出它后面带的错误信息。例如:
#ifndef SOMETHING
#error SOMETHING not defined!
#endif
如果在这段代码之前未定义过SOMETHING,则在编译时出错,并给出”SOMETHING not defined!”的错误信息。
  1.3 定义一个宏,求出给定数组中的元素的个数
#define NELEMENTS(array) ??

1.4 定义一个宏,求出给定结构中给定成员的偏移量
#define OFFSET(structure, member) ??

1.3 #define NELEMENTS(array) (sizeof(array) / sizeof((array)[0]))

1.4 #define OFFSET(structure, member) ((int) &(((structure *)0)->member))

请说出static关键字的3种用处:

(1)用于全局变量;

(2)用于局部变量;

(3)用于函数。

/* file.c */

static int a;

int b;

static int fn()

{

static int x;

int y;

}

 

【7 const关键字】

7.1 const关键字的意义是什么?

7.2 解释以下的变量定义:

const int a1;

int const a2;

const int *a3;

int * const a4;

int const * const a5;

【8 volatile关键字】

8.1 volatile意义?例如

volatile int *p;

8.2 volatile能和const一起使用吗?例如

volatile const int *p;

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载