← 2022 · 华为 笔试

推荐答案 测试一下

下面的选项中关于宏定义的说法不正确的是

B.宏定义文件最好放在一个文件中集中管理,防止出现不同项目需要修改为不同的宏定义值,但是却漏改了某些地方的情况出现 C.综合的时候,define可以跨文件列表生效。 D.仿真时如果出现宏定义冲突,后面的define值会覆盖前面的define值。
单选题 中等 笔试真题单选

参考答案

正确答案是A。选项A说“在模块的文件列表最后需要undef使用的宏”,这个表述不正确。实际工程中,宏定义的作用域通常希望限定在需要的模块内,正确的做法是在需要宏的模块内使用`define定义,并在该模块文件末尾用`undef取消定义,以避免影响其他模块。而说“文件列表最后”意味着在编译文件列表的末尾统一undef,这会破坏宏的作用域隔离:如果文件列表中有多个模块,前面的模块定义宏,后面的模块可能也需要使用该宏,但在文件列表末尾undef会导致后面的模块无法使用;或者如果多个模块分别定义同名宏,在文件列表末尾undef会导致覆盖关系混乱。因此,更好的实践是每个模块各自管理自己的宏定义和取消,而不是在文件列表末尾统一处理。其他选项:B选项,宏定义文件集中管理确实能减少遗漏修改的风险,是正确的设计方法;C选项,综合时`define作为编译指令,在整个编译单元内跨文件生效,正确;D选项,仿真时如果出现宏定义冲突,后面的`define定义会覆盖前面的定义,这是Verilog编译规则,正确。所以不正确的是A。

涉及知识点

  • `define宏定义的作用域管理
  • `undef取消宏定义的正确位置
  • 宏冲突时的覆盖规则
  • 编译指令跨文件生效范围
← 上一题
登录后反馈错题
下一题 →