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.
工具/软件:TI C/C++编译器
编译器团队,
我们的客户还提出了这样的观点:为了符合C99,正确的NULL定义应该是: #define NULL ((void *) 0)
然而,目前的情况并非如此。 我们意识到,虽然我们不符合100 % C99,但我们支持许多C99扩展。
尽管如此,为了保持一致,我们也应遵守这项公约。
请参阅下图了解更多证据。 评论真的很受欢迎!
Ty,
CY
拍摄的C99页显示:“宏为NULL,它扩展为实现定义的空指针常量,...”
相同的C99标准定义了以下空指针常量:
"值为0的整数常量表达式或类型为void *的此类表达式称为空指针常量。"
因此,将NULL定义为0似乎完全符合C99。
在这种情况下,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