笔试题总结
时间: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))
#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;
相关阅读 更多 +