【发布时间】:2021-03-22 06:21:44
【问题描述】:
首先,如果问题中有任何语法错误,我想道歉。
言归正传,我对使用 MISRA C 指南进行编码有点陌生,
遵循 MISRA C 2004 中的两条规则:
规则 16.1(必需):函数不应定义为可变数量的
论据。
规则 20.9(必需):输入/输出库
这显然意味着我不能在生产代码中使用 printf 以使其符合 MISRA C,因为 printf 是 <stdio.h> 的一部分并允许可变数量的参数,所以我开始了寻求找出我如何编写自己的 printf 声明,到目前为止,我无法找到任何解决此困境的方法,我们将不胜感激其他开发人员的帮助。
【问题讨论】:
-
如果您编写了自己的“printf”,它最终也会成为一个可变参数函数。所以第一步是决定 what 你需要的 printf 部分不需要可变数量的参数。
-
咦,为什么要在主题中添加“关闭”?这不是关闭的工作方式。如果您对各种 PC 程序员的回答感到沮丧,您可以在问题中添加embedded 标签来吓跑他们。总体而言,准确了解您所针对的系统和硬件类型会很有帮助。
-
另外,为什么您使用旧的 MISRA-C:2004 而不是最新的? (不过,在这种特定情况下,它们具有相同的要求。)
-
好的,这是一个通用库。但是在这种情况下你需要 printf 做什么?只是为了测试? MISRA 允许您在调试版本中使用 stdio.h,但不能在生产中使用。或者,如果您需要某种方式的日志记录,您可以创建一个函数,将一个字符串丢给调用者,然后让调用者担心如何呈现它。