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.

[参考译文] 编译器/TM4C1290NCPDT:符合C99 #Define NULL ((void *) 0)

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/574333/compiler-tm4c1290ncpdt-c99-compliant-define-null-void-0

零件号:TM4C1290NCPDT

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

编译器团队,

我们的客户还提出了这样的观点:为了符合C99,正确的NULL定义应该是: #define NULL ((void *) 0)

然而,目前的情况并非如此。  我们意识到,虽然我们不符合100 % C99,但我们支持许多C99扩展。

尽管如此,为了保持一致,我们也应遵守这项公约。

请参阅下图了解更多证据。  评论真的很受欢迎!

Ty,
CY

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

    拍摄的C99页显示:“宏为NULL,它扩展为实现定义的空指针常量,...”

    相同的C99标准定义了以下空指针常量:

    "值为0的整数常量表达式或类型为void *的此类表达式称为空指针常量。"

    因此,将NULL定义为0似乎完全符合C99。

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

    感谢您的反馈! 但是,虽然我理解您的观点,并且总体上同意您的观点,但我们的客户基本上感觉不同。 我希望能找到一种能缓解他们的担忧的肯定方案,或者至少能让我们做出与您分享的回复。

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

    在这种情况下,C99标准是管理文档。  这是非常清楚的。  它显示NULL:

    扩展到实现定义的空指针常量

    因此,将NULL定义为简单0是有效的。

    谢谢,此致,

    -George

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

    Chris YORKEY 说:
    虽然我理解并大致同意您的观点,但我们的客户基本上感觉不同。[/QUOT]

    您发布的MISRA C标准的照片包括以下文本,其中列出了“符合NULL定义”,包括0,因此MISRA标准显式地将NULL定义为普通0的实现:

    0

    (void*) 0

    ((0))

    ((((1-1)))

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

    团队,

    我们的客户报告了以下信息:

    ———

    我们进一步研究了NULL的问题,发现我们有一个误解。  在MISRA-2012标准(第102页,规则11-9)中,我们忽略了这一点:

    以下示例符合要求,因为始终允许使用实现提供的宏NULL,即使它扩展到值为0的整型常量表达式。

    #include <stddef.h>

    extern void f( uint8_t *p );

     

    /*符合NULL的任何符合定义,例如:

       0

       (void *) 0

       ((0))

       ((((1-1)))*/

    F (NULL);

     

    因此,我们同意允许stddef.h中NULL的CCS中的当前实现(即#define NULL 0),并且在MISRA-2012下可以接受目前编写的内容。

    我们对制造混乱表示歉意。  请转递您的同事。

    ———

    已关闭。

    非常感谢,

    CY