- 160
- 0
- 约3.62万字
- 约 37页
- 2017-04-24 发布于广东
- 举报
计算机类基础问题——经典题目合集.doc
C
C语言考查的重点一般是:指针、结构体、条件编译、全局变量/局部变量。以下是我遇见过的面试问题:
1)请说一下extern C的作用(汉略)
Extern “C”是由C++提供的一个连接交换指定符号,用于告诉C++这段代码是C函数。这是因为C++编译后库中函数名会变得很长,与C生成的不一致,造成C++不能直接调用C函数,加上extren “c”后,C++就能直接调用C函数了。
Extern “C”主要使用正规DLL函数的引用和导出 和 在C++包含C函数或C头文件时使用。使用时在前面加上extern “c” 关键字即可
extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。记住,下列语句:?? extern?int?a;
?? 仅仅是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现连接错误。 通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块B欲引用该模块A中定义的全局变量和函数时只需包含模块A的头文件即可。这样,模块B中调用模块A中的函数时,在编译阶段,模块B虽然找不到该函数,但是并不会报错;它会在连接阶段中从模块A编译生成的目标代码中找到此函数。(
一、修饰名(Decorated Name) C/C++程序中的函数在内部是通过修饰名来标识的。修饰名是在函数定义或原型编译阶段由编译器创建字符串。当你在LINK等工具中要指定一个函数名时,会用到修饰名。 1、使用修饰名: 大多数情况下,你不必知道函数的修饰名是什么。连接器等工具通常都能处理函数未修饰的名字。然而,在有些情况下,你可能需要指定函数的修饰名。对于C++重载函数和特定的成员函数(如:构造函数和析构函数),你必须指定这些函数的修饰名,以便连接器等工具能够匹配名字。同时,你也必须在那些引用c或c++函数名的汇编源文件中使用修饰名。 2、查看修饰名: 如果你编译了一个源文件,该源文件中包含了函数定义或原型,你可以获得???数的修饰名形式。 (1)用编译器列表(compiler listing)来查看: (i)通过将列表文件类型编译器选项(/FA[c|s]) 设置为下面中的一种,来产生列表文件:Assembly with Machine Code (/FAc); Assembly with Source Code (/FAs); Assembly, Machine Code, and Source (/FAcs). (ii)在产生的列表文件中,找到包含未经修饰的函数定义的行。 (iii)查找前面一行。PROC NEAR 命令标签前就是函数名经过修饰后的形式。 (2)使用DUMPBIN工具来查看: 在.OBJ或.LIB上运行 DUMPBIN,使用/SYMBOLS选项。在输出中查找未经修饰的函数定义。后面跟着的就是经过修饰的函数名,用圆括号括起来的。 二、替代连接说明: 如果在c++中编写一个程序需要用到c的库,那该如何?如果这样声明一个c函数: void f(int a,char b); c++编译器就会将这个名字变成相应的修饰名,比如: HYPERLINK mailto:?f@@YAXHD@Z \t _blank ?f@@YAXHD@Z。 然而,c编译器编译的库的内部函数名(连接器使用)是完全不同的。这样,当c++连接器连接c的函数库时,将会产生内部使用函数不匹配。 故,c++中提供了一个替代连接说明(alternate linkage specification),它是通过重载extern关键字来实现的。 extern后跟一个字符串来指定想声明的函数的连接类型,后面是函数声明,比如: extern C void f(int a,char b); 这样,就是告诉编译器是c连接,这样就不会转换函数名了。此例中,编译后的内部函数名是_f。
2)请说一下#ifdef...的作用(汉略)
#ifdef的作用大体上是工程功能的切换,通常是根据某些宏是否定义来决定是否启用某些功能。比如网络监控系统,通过宏的切换,可以实现平台的移植,视屏路数的定义,云台、矩阵和透明串口的切换,等等。由于#ifdef的存在,静态配置一下参数即可让firmware实现不同的功能。
1.利用#ifdef/#endif将某程序功能模块包括进去,以向某用户提供该功能。
在程序首部定义#ifdef HNLD:
#ifdef HNLD
includen166_hn.c
#endi
您可能关注的文档
- 计算机发展概述和计算机系统.doc
- 计算机四级教程-网络工程师(新版本).doc
- 计算机四级数据库工程师重点txt版.doc
- 计算机四级网络工程师历年真题及答案汇编(2008年4月--2011年9月).doc
- 计算机四级网络工程师考试复习通关绝对.doc
- 计算机在材料科学中的应用---完整版.doc
- 计算机在材料科学中的应用---简答题 2 .doc
- 计算机在材料科学中的应用---简答题.doc
- 计算机在材料科学中的应用--模拟试题.doc
- 计算机地籍登记管理系统的设计与实现.doc
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
原创力文档

文档评论(0)