工具/软件: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"肯定会受到影响。