[英]C99 warning for assigning a void pointer to a non-void pointer?
在我的C99標准文件(實際上是2007年9月的自由委員會草案),附件I共同警告2中,它指出了這一點
(when) an implicit narrowing conversion is encountered, such as the assignment of a long int or a double to an int, or a pointer to void to a pointer to any type other than a character type (6.3)
是實現可能產生警告的一些常見情況之一。
好吧,那么ac編譯器是否應該向代碼發出警告,例如int *p = malloc(sizeof(*p))
? 雖然在C代碼中似乎更常見的是不使用malloc
s。
來自C99 Annex I
,引用來自:
實施可能會在許多情況下產生警告,其中沒有一個被指定為本國際標准的一部分。 以下是一些較常見的情況。
這里的操作短語是“可以生成”。 標准語言非常精確。 如果他們想要堅持產生警告,他們就會使用“必須生成”或“必須生成”這一短語。
如果您的環境是訪問無效對齊的數據類型(例如非字邊界上的字)會導致災難性故障(如總線錯誤),編譯器可能會警告您這樣的情況。
不,在將void*
賦給另一個指針時不應該生成警告,因為這正是構造void*
的發明。 這是一個通用指針,可以轉換為任何其他數據指針。 這絕不能與整數類型的縮小轉換相媲美,在這種情況下,您可能會丟失信息。 這里什么都沒有丟失。
除此之外,我發現C ++編譯器切換到C ++ 11非常煩人,C ++編程器現在已經很多了。 至少在C中,非常精確地定義了對無符號整數類型的縮小轉換,並且編譯器不應該吠叫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.