C99警告是否为无效指针指定了void指针?

在我的C99标准文件(实际上是2007年9月的自由委员会草案),附件I共同警告2中,它指出了这一点

(何时)遇到隐式缩小转换,例如将long int或double赋值给int,或指向void的指针指向除字符类型以外的任何类型的指针(6.3)

是实现可能产生警告的一些常见情况之一.

好吧,那么c编译器是否应该向代码发出警告,例如int * p = malloc(sizeof(* p))?虽然在C代码中似乎更常见的是不使用mallocs.

最佳答案 来自C99附件I,引用来自:

An implementation may generate warnings in many situations, none of which are specified as part of this International Standard. The following are a few of the more common situations.

这里的操作短语是“可以生成”.标准语言非常精确.如果他们想要坚持产生警告,他们就会使用“必须生成”或“必须生成”这一短语.

如果您的环境是访问无效对齐的数据类型(例如非字边界上的字)会导致灾难性故障(如总线错误),编译器可能会警告您这样的情况.

点赞