【嵌入式面试】嵌入式经典面试题汇总(C语言)

2023-12-16 00:08:24

一、预处理器

1、用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

#define SECONDS_PER_YEAR (365*24*60*60)UL

在这个例子中,SECONDS_PER_YEAR是一个宏常量,它的值被计算为365乘以24乘以60乘以60,即表示一年中的秒数。
这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数

2、写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。

#define MIN(a, b) ((a) <= (b) ? (a) : (b))

这个宏使用了条件运算符(?:)来进行比较,并返回较小的参数。其中(a) <= (b)是比较表达式,如果为真,则返回(a),否则返回(b)。宏在预处理阶段进行文本替换,因此应确保将参数用括号括起来,以避免可能的优先级问题。

3、预处理器标识#error的目的是什么?

预处理器指令#error的目的是在预处理阶段生成一个错误消息。当条件满足时,它会停止编译过程,并将指定的错误消息输出到编译器的错误日志中。

#error指令通常用于在预处理阶段检查代码的某些条件或要求,如果不满足条件或不符合要求,则会触发错误消息。这可以帮助开发人员及早发现问题并进行修复。

使用#error指令的一些常见情况包括:

  1. 检查特定的编译器或操作系统版本要求。
  2. 确保必需的宏定义或头文件已经包含。
  3. 防止使用不推荐或废弃的功能或方法。
  4. 检查代码的一些约束条件是否满足,如数组大小、常量值等。

下面是一个示例,使用#error指令检查宏定义是否满足要求:

#ifndef MY_MACRO
#error "MY_MACRO is not defined. Please define it before compiling."
#endif

在上述示例中,如果预处理阶段检测到MY_MACRO宏未定义,编译将停止,并输出错误消息"MY_MACRO is not defined. Please define it before compiling." 到编译器的错误日志中。

总之,#error指令可以帮助开发人员在编译前捕获一些错误或不符合要求的情况,并提供有用的错误信息以便及早修复问题。

文章来源:https://blog.csdn.net/weixin_42163707/article/details/135025215
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。