This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TMS320F28335:包括启用 Misra 警告的 stdio.h 中断

Guru**** 2619545 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/700257/compiler-tms320f28335-including-stdio-h-breaks-with-misra-warnings-enabled

器件型号:TMS320F28335

工具/软件:TI C/C++编译器

使用 TI 的 C2000 C 编译器、如下所示:

/opt/ti/ti-cgt-c2000_16.9.7.LTS/bin/cl2000 \
   -v28 \
   -ml \
   -mt \
   --float_support=fpu32 \
   -Ooff \
   -g \
   --advice:performance=all \
   --issENT_remarks \
   --check_misra=3,8.1,8.2.11.8.11.12.9.1.9.2.9.9.3.12.1,12.1,12.2,12.1,12.2,12.3,12.2,12.2,12.3,12.7,12.8,12.8,12.8,13.1,13.2,13.2,13.2,13.3,13.2,13.3,13.2,13.2,13.3,14.2,14.3,15.3,15.3,15.4,15.5,16.7,20.1,16.7,19.1,19.1,19.1,19.1,19.1,19.1,19.1,19.2,19.2,19.2,19.2,19.2,19.2,19.3,19.2,19.2,19.
   --misra_advising=error \
   --misra_required=error \
   --define=XDC__STRICT \
   --emit_warns_as 错误\
   --include_path=/opt/ti/ti-cgt-c2000_16.9.7.LTS/include \
   --include_path=include \
   --c_file=logger.c \
   --diag_warning=225 \
   -c99 \
   --diag_wrap=off \
   --output_file=logger.c.obj

源文件中包含"stdio.h"时、我会收到以下警告:

"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第65行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("size_t")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第79行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("文件")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第94行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("FPOS_t")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第131行:错误:(MISRA-C:2004 20.1/R)标准库中保留的标识符、宏和函数不应被定义、重新定义或未定义("_IOFBF")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第132行:错误:(MISRA-C:2004 20.1/R)标准库中的保留标识符、宏和函数不应被定义、重新定义或未定义("_IOLBF")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第133行:错误:(MISRA-C:2004 20.1/R)标准库中保留的标识符、宏和函数不应被定义、重新定义或未定义("_IONBF")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第154行:错误:(MISRA-C:2004 20.1/R)标准库中保留的标识符、宏和函数不应被定义、重新定义或未定义("BUFSIZ")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第156行:错误:(MISRA-C:2004 20.1/R)标准库中保留的标识符、宏和函数不应被定义、重新定义或未定义("FOPEN_MAX")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第157行:错误:(MISRA-C:2004 20.1/R)标准库中保留的标识符、宏和函数不应被定义、重新定义或未定义("filename_MAX")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第158行:错误:(MISRA-C:2004 20.1/R)标准库中保留的标识符、宏和函数不应被定义、重新定义或未定义("TMP_MAX")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第160行:错误:(MISRA-C:2004 20.1/R)标准库中的保留标识符、宏和函数不应被定义、重新定义或未定义("stdin)
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第161行:错误:(MISRA-C:2004 20.1/R)标准库中保留的标识符、宏和函数不应被定义、重新定义或未定义("stdout")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第162行:错误:(MISRA-C:2004 20.1/R)标准库中的保留标识符、宏和函数不应被定义、重新定义或未定义("stderr")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第164行:错误:(Misra-C:2004 20.1/R)标准库中保留的标识符、宏和函数不应被定义、重新定义或未定义("L_tmpnam")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第168行:错误:(MISRA-C:2004 20.1/R)标准库中保留的标识符、宏和函数不应被定义、重新定义或未定义("seek_set")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第169行:错误:(MISRA-C:2004 20.1/R)标准库中保留的标识符、宏和函数不应被定义、重新定义或未定义("seek_CUR")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第170行:错误:(MISRA-C:2004 20.1/R)标准库中保留的标识符、宏和函数不应被定义、重新定义或未定义("seek_end")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第173行:错误:(MISRA-C:2004 20.1/R)标准库中的保留标识符、宏和函数不应被定义、重新定义或未定义("NULL")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第177行:错误:(MISRA-C:2004 20.1/R)标准库中保留的标识符、宏和函数不应被定义、重新定义或未定义("EOF ")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第203行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应重复使用("删除")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第204行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应重复使用("重命名")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第205行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("tmpfile")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第206行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应重复使用("tmppnam")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第211行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("fclose")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第212行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("fopen")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第214行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("freopen")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第217行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("setbuf")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第219行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("setvbuf")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第222行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应重复使用("fflush")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第227行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("fprintf")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第230行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("fscanf")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第233行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应重复使用("printf")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第235行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应重复使用("scanf")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第237行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("sprintf")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第243行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("sscanf")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第246行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("vfprintf")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第252行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("vprintf")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第256行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应重复使用("vsprintf")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第273行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("fgetc")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第274行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("fges")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第276行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("fputc")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第277行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("fputs")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第279行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("getc")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第280行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("getchar")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第281行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("ges")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第282行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("putc")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第283行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("putchar")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第284行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("PUS")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第285行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("ungetc")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第290行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("fread")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第293行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("fwrite")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第300行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("fgetpos")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第302行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应重复使用("fseek")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第304行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("fsetpos")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第306行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应重复使用("ftell ")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第307行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("回卷")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第312行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应重复使用("clearerr")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第313行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("fefo")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第314行:错误:(Misra-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("铁镜像")
"/opt/ti/ti-cgt-c2000_18.1.2.LTS/include/stdio.h、第315行:错误:(MISRA-C:2004 20.2/R)标准库宏、对象和函数的名称不应被重复使用("perror")

查看其他一些标准库头文件、我已经看到了这些用于处理此问题的 pragma:

#pragma diag_push
#pragma CHECK_MISRA ("-20.1")/*标准标头必须定义标准名称*
#pragma CHECK_MISRA ("-20.2")/*标准头文件必须定义标准名称*/
#pragma CHECK_MISRA ("-19.7")/*实现所需的宏*/
#pragma CHECK_MISRA ("-19.10")/*需要类型作为宏参数*/

"stdio.h"中不存在这些参数。 如果我手动添加它们、我可以禁用这些警告。

这是监督、还是将其从特定标题中排除的理由?

我没有检查所有其他标准头文件、但"stdio.h"肯定会受到影响。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您报告此问题。  这似乎是一种监督。  我在 SDOWP 系统中提交了 CodeGen-4885、以对其进行调查。  欢迎您在我的签名中使用下面的 SDOWP 链接进行访问。  有两种可能的结果。  第一、问题得到解决。  第二、将给出 stdio.h 允许使用 MISRA 诊断的原因

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨、George、

    感谢您的快速回复。

    以下是几个后续问题、如果我可以的话:

    -如果这被认为是一个错误,是否也会检查其它头文件(以及带有其它工具链(如 ARM)的标准库)?
    -单击 SDOWP 链接会显示内部服务器错误。 这是临时的吗?

    再次感谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    efftee 说:
    -如果认为这是一个错误、是否也会检查其他头文件(以及具有其他工具链(如 ARM)的标准库)?

    是的

    efftee 说:
    -单击 SDOWP 链接会显示内部服务器错误。 这是临时的吗?

    我认为是这样。  从我的结尾开始一切看起来都正常

    谢谢、此致、

    乔治