嵌入式笔试刷题(第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)


结果分析:

  1. str1 == str2 比较的是地址,不同 ⇒ false
  2. str3 == str4 也是数组,地址不同 ⇒ false
  3. str5 == str6 指向字符串常量池,同一地址 ⇒ true

19. C++ 中空类默认会生成哪些成员函数?

  • 默认构造函数
  • 拷贝构造函数
  • 拷贝赋值函数
  • 析构函数
  • 移动构造函数(C++11 起)
  • 移动赋值函数(C++11 起)

示例:

class Empty {};


空类也占用至少1字节内存。

20. 是否所有动作都由 main() 函数引起?若不是,举例说明

不是。

示例:

  1. 全局对象构造函数在 main 之前执行。
  2. 静态对象析构函数在 main 返回后执行。
  3. 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

#嵌入式测试,嵌入式开发##嵌入式笔面经分享##满分简历要如何准备?##面试经验谈#
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-02 19:40
xkl 自动化控制 17.5*(14-16) 硕士211
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务