簡體   English   中英

C99警告是否為無效指針指定了void指針?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM