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.

[参考译文] 编译器/C6000-CGT:--diag_suppress 不工作

Guru**** 2999690 points

Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/925194/compiler-c6000-cgt---diag_suppress-is-not-working

器件型号:C6000-CGT
主题中讨论的其他器件:AM5728

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

我有问题、我有这些错误

第162行:错误#173:无效类型转换
第163行:错误#173:无效类型转换

我使用 --diag_suppress=173、但它不会影响、

'building file:"../app_main.cpp"'
'invoking:C6000 Compiler'"C
:/ti/ti-cgt-c6000_8.3.6/bin/cl6x -mv6600 --include_Firmware/projects"-include_path="C:/ti/pdk_am57xx_1_0_10/packages/ti/boot/sbl/soc/am57xx /ti/ndk_2_26_00_08/packages /ti/pdk_am57xx_1_0_10/packages/ti/transport/ndk/nimu -- include_path="C:/ti/pdk_am57xx_1_0_10/packages/ti/board/src/maxxAM572x/include /ti/pdk_am57xx_1_0_10 /ti/pdk_am57xx_1_0_10/packages/ti/boot/sbl/board/src -- include_mware/niminc:/trademinc:/cmninc:/cmninc:/tru_use-path="c_definc:/inc:/inc:/inc:/inc:/inc:/inc:/inc:/intru_us_mware/tration="-include/ctru_path=/ti/pdk_am57xx_1_0_10/packages/ti/boot/sbl/board/src /ti/ti-cgt-c6000_8.3.6/include /ti/pdk_am57xx_1_0_10/packages -include_mware/inc/tru/cmnimulse-content/inc:-tration="-include/ce-content/tration_sinc" 

我还尝试使用 pragma:

#ifdef _TMS320C6x
#define ignore_Conversions _Pragma ("diag_push")\
Pragma ("diag_suppress 173")\
_Pragma ("check_MISRA (\"-9.1\")")

#define ignore_Conversations_restore _Pragma ("diag_pop") 

但也没有影响…


有人可以提供帮助吗?

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

    并非所有诊断都可以抑制。  第173号就是其中之一。  如果可以抑制诊断、则诊断编号后跟-D  例如...

    % cl6x --display_error_number file.c
    "file.c"、第3行:警告#225-D:隐式声明函数"function_no_declared" 

    默认情况下不显示诊断编号。  必须使用选项--display_error_number 来查看它们。  请注意诊断编号225之后的-D。  这意味着可以使用--diag_suppress 抑制诊断225。   

    有关更多详细信息、请在 C6000编译器手册中搜索 标题为 了解诊断消息的子章节。

    谢谢、此致、

    乔治

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

    我正在使用 AM5728、在 ARM A15上 、相同代码的#pragma GCC 诊断错误"-Wconversion "正在工作、但在 C66上、我尝试实现相同的结果、您可以说我不能忽略此错误...

    问题是、我尝试将指向成员函数的指针转换为常量 void 指针、其外观如下所示  

    (常量 void*) ExampleClass::ExampleFunc 


     

     

    也许有办法解决这个问题、而不会产生压力? 谢谢。 

     

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

    对于获取 有关无效类型转换的诊断的源文件、 请按照文章 如何提交编译器测试用例中的说明进行操作。

    谢谢、此致、

    乔治

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

    e2e.ti.com/.../app_5F00_main.pp.txt

    编译器我使用 ti-cgt-C6000_8.3.6

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

    主要编译器通常认为将指针转换为成员函数是一个错误主意: https://godbolt.org/z/3xd5rn

    GCC 提供了从以下指针提取函数的扩展: https://gcc.gnu.org/onlinedocs/gcc/Bound-member-functions.html

    指向成员函数的指针不是数据或函数指针、因此不能视为数据指针。 考虑这样一个指向成员的指针是虚拟函数的情况。 必须进行一定程度的处理才能根据发送到的'this'指针中的数据实际调用所需的函数。 这意味着指向成员函数的指针甚至可能不是函数、而是数据对象(虚拟函数表条目)。

    在 C++14标准的第3.9.2.3节中、在与类型相关的任何文本中、"指针"不适用于指向成员的指针类型、除非该成员是静态的、因此使转换和别名规则等概念无效。 这增加了一个概念、即指针到成员类型不可转换为普通指针类型。

    根据第4.11.2节、指针到成员上只允许两种类型的转换:

    • 空指针常量(nullptr)到指向成员的指针的转换称为空成员指针值、与不是从 nullptr 创建的任何其他指向成员的指针不同
    • 将'Pointer to member of B of type T'转换为'Pointer to member of D of type T',其中 B 是基类,D A 派生的 B 类

    同一节的脚注59澄清了:

    "请注意、指向成员的指针不是对象指针或函数指针、此类指针的转换规则不适用于指向成员的指针。 特别是,指向成员的指针不能转换为 void*。"

    因此、我相信您这里的代码示例格式不正确、并且预计会出现错误。

    不幸的是、我看不到任何立即修复代码的方法、因为回调 API 似乎依赖于将此成员函数转换为 const void *。