嵌入式笔试刷题(第10天)
16. 为什么调用 C 编译函数时要加 extern "C"?
原因: C++ 编译器对函数名进行 name mangling(名字修饰),而 C 编译器不做修饰。
解决方法:
extern "C" {
void c_function();
}
这样可以让 C++ 编译器生成与 C 编译器兼容的符号。
17. 用 C++ 判断操作系统是 16 位还是 32 位(不能用 sizeof)
方案:通过地址移位判断
int check_bits() {
long x = 1L << 31;
if (x == 0) return 16;
else return 32;
}
说明: 16 位下左移 31 位结果为 0,32 位下非 0。
18. 三条输出语句的结果是什么?
char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char* str5 = "abc"; const char* str6 = "abc"; cout << boolalpha << ( str1 == str2 ) << endl; // (1) cout << boolalpha << ( str3 == str4 ) << endl; // (2) cout << boolalpha << ( str5 == str6 ) << endl; // (3)
结果分析:
str1 == str2比较的是地址,不同 ⇒falsestr3 == str4也是数组,地址不同 ⇒falsestr5 == str6指向字符串常量池,同一地址 ⇒true
19. C++ 中空类默认会生成哪些成员函数?
- 默认构造函数
- 拷贝构造函数
- 拷贝赋值函数
- 析构函数
- 移动构造函数(C++11 起)
- 移动赋值函数(C++11 起)
示例:
class Empty {};
空类也占用至少1字节内存。
20. 是否所有动作都由 main() 函数引起?若不是,举例说明
不是。
示例:
- 全局对象构造函数在
main之前执行。 - 静态对象析构函数在
main返回后执行。 - C++
atexit()注册的函数也在main后执行。
class A {
public:
A() { cout << "Global A constructed" << endl; }
~A() { cout << "Global A destructed" << endl; }
};
A a;
int main() {
cout << "main" << endl;
}
输出:
Global A constructed main Global A destructed
更多内容全在下方专栏
全网最受欢迎的嵌入式笔试专栏
笔试专栏包含全部最新的笔试必考考点,非常适合在找工作面经薄弱的同学
3000+订阅还会涨价,提前订阅提前享受,持续更新中。
专栏链接:https://www.nowcoder.com/creation/manager/columnDetail/mPZ4kk
#嵌入式测试,嵌入式开发##嵌入式笔面经分享##面试经验谈#
查看9道真题和解析

