[英]GCC not warning on implicit cast from void * to void **
由于void *是通用指针,因此可以将其他任何类型隐式转换为它。 但是,void **不是通用的指针,因此如果我隐式地将其强制转换为指针,我会期望gcc发出警告。
在我的代码中,我有一个将指针指向不透明指针的函数(因为它可以重新分配并写回),如下所示:
char *string_store(void **ctxp, const char *str);
如果我将其错误地称为:
void *context;
...
name = string_store(content, "my name");
而不是string_store(&content...)
,我希望gcc对此发出警告。 但事实并非如此。 我对gcc有-Wall -Wextra选项。
是否有警告选项可将其打开? 我在gcc文档中找不到它。
由于void *是通用指针,因此可以将其他任何类型隐式转换为它。
没错, void *
是通用指针。 这意味着两件事:
void *
; void *
被隐式转换为任何其他指针类型。 因此,GCC缺乏警告不是因为您隐式地将其转换为 void **
,而是因为您是隐式地将其转换为 void *
。 根据您的要求,警告在许多情况下都是不合适的,包括以下非常实际的用例:
void **ptr = malloc(sizeof *ptr);
因此,我认为这不是可取的。 对于更严格的指针转换,请使用C ++,其中大多数隐式void *
强制类型已被删除。
显然,有-Wc++-compat
标志将对此发出警告,但是您可能会对此感到非常恼火。
警告有关ISO C和ISO C ++的公共子集之外的ISO C构造,例如,请求从void *隐式转换为指向非void类型的指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.