|
以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 大家讨论一下几道C语言的题目[讨论] (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=25543) |
|
-- 作者:enorm -- 发布时间:12/16/2005 5:06:00 PM -- 大家讨论一下几道C语言的题目[讨论] 1 使用宏】 问:以上TRACE()宏的作用是什么? 1.2 #error的作用? 1.3 定义一个宏,求出给定数组中的元素的个数 1.4 定义一个宏,求出给定结构中给定成员的偏移量 给定以下类型的变量a的定义式: a) An integer 【3 复杂类型(1)】 有如下表达式: char (*(*x())[])(); 请用文字描述x是什么。 jmp_buf的定义: typedef struct _jmp_buf setjmp函数的原型: extern int setjmp (jmp_buf __env); 问:调用setjmp时传递__env的内容,还是传递指针? 问:为什么标准头文件都有类似以下的结构? #ifndef __INCvxWorksh #ifdef __cplusplus /*...*/ #ifdef __cplusplus #endif /* __INCvxWorksh */ 【6 static关键字】 请说出static关键字的3种用处: /* file.c */ static int fn() 7.1 const关键字的意义是什么? const int a1; 【8 volatile关键字】 8.1 volatile意义?例如 8.2 volatile能和const一起使用吗?例如 【9 sizeof()】 有以下定义: char *pmsg = "A"; 问: void f(char param[100]) 【10 字符串】 有以下代码 char *pmsg = "hello, world!"; 试评论该代码。 有以下代码: void foo() 请问调用foo()的输出? 【12 内存访问】 有以下代码: void fn() p = (int *)((unsigned int)a + 1); 试评论以上代码。 【13 C库函数】 请说明以下函数的意义: void perror(const char *__s); isspace(), isxdigit(), strerr(), sprintf() |
|
-- 作者:enorm -- 发布时间:12/16/2005 5:08:00 PM -- 大家踊跃讨论阿,呆会发参考答案~~~~~~~~~ |
|
-- 作者:pennyliang -- 发布时间:12/16/2005 9:22:00 PM -- 1.1 #ifdef NDEBUG #define TRACE(S) S #else #define TRACE(S) printf("%s;\n", #S); S #endif 问:以上TRACE()宏的作用是什么? 答:trace得用处在于在仅在调试,在调试栏中打印实时信息。 |
|
-- 作者:enorm -- 发布时间:12/17/2005 10:14:00 PM -- 先给出前两题答案 1.1 这道题主要考察#的功能,S是一个表达式。TRACE()的作用就是在DEBUG状态下,计算表达式S的值之前先打印S。 1.2 #error用于向编译器报错,并输出它后面带的错误信息。例如: |
|
-- 作者:pennyliang -- 发布时间:12/17/2005 10:18:00 PM -- #开头都是预编译,急得好像还有#warning |
|
-- 作者:卷积内核 -- 发布时间:2/8/2006 8:45:00 AM -- 答案,仅供参考: 1.1 这道题主要考察#的功能,S是一个表达式。TRACE()的作用就是在DEBUG状态下,计算表达式S的值之前先打印S。 1.2 #error用于向编译器报错,并输出它后面带的错误信息。例如: 1.3 #define NELEMENTS(array) (sizeof(array) / sizeof((array)[0])) 1.4 #define OFFSET(structure, member) ((int) &(((structure *)0)->member)) 2 (a) An integer:int a; 3 char (*(*x())[])(); 4 这个定义有点怪,它的意思是:jmp_buf这种类型是一个数组,只有一个元素,元素类型为struct{...}。数组名作为函数参数时,应该是传递地址/指针。 5 在编译源文件时,C编译器和C++编译器都会对符号(函数或变量)名作某些修正,但两者采用的修正方法不同,所以两者生成的目标文件不能互相链接。在C++中使用extern "C"可以让C++符号获得C链接特性。由于C++编译器会自动定义__cplusplus宏,所以在C语言头文件中采用这种结构可以保证无论使用何种编译器,生成的目标文件都具有C链接特性,能够与标准C编译器所生成的目标文件相链接。 6 (1)用于全局变量:外部静态变量,只能在本源文件中被引用,不能被其它源文件所引用。 7.1 const关键字在C语言中用于声明"常变量",其值不可修改,但具有确定的数据类型。C编译器总是为其分配相应的存储单元。 7.2 const int a1; a1是整型常量。 8.1 volatile关键字用于声明内存映射的易失型变量,这类变量的值随时可能由于某种编译器所不知道的原因(例如,外部设备对其写入)所改变,所以编译器在进行代码优化时不能对其做任何的假设和依赖。 8.2 volatile可以和const一起使用,不过很少见。 9 sizeof(pmsg) = 指针变量的长度 10 这种写法是和编译器&操作系统相关的,所以不应当这样写。在WIN2K+VC环境下debug程序时会出现异常。 "hello, world!"是字符串常量(string literal),它的类型是const char [N],N为字符串的长度(包括结尾的0)。 GNU手册里这样说: 那么,为什么不允许修改字符串常量呢(它不也在内存中吗)? 11 输出"> 6"。 12 p = (int *)((unsigned int)a + 1); 13 这些函数到处都查得到,就不用做了吧. |
|
-- 作者:zhonglvlin -- 发布时间:4/7/2006 8:00:00 PM -- 有收获 |
|
-- 作者:zsb49 -- 发布时间:4/10/2006 7:15:00 PM -- 好东西 |
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
78.125ms |