我要轉換malloc的結果嗎?

這個問題 ,有人建議意見 ,我應該投的結果malloc ,即 html

int *sieve = malloc(sizeof(int) * length);

而不是: 程序員

int *sieve = (int *) malloc(sizeof(int) * length);

爲何會這樣呢? 編程


#1樓

強制轉換malloc的結果不是強制性的,由於它返回void* ,而且void*能夠指向任何數據類型。 編程語言


#2樓

進行強制轉換是由於: spa

  • 它使您的代碼在C和C ++之間更易於移植 ,而且正如SO經驗所代表的那樣,許多程序員聲稱他們其實是在用C ++(或C加本地編譯器擴展)編寫時才用C編寫。
  • 不然, 可能會隱藏一個錯誤 :請注意全部SO示例,它們混淆了什麼時候編寫type *type **
  • 它使您沒法注意到您未能#include適當的頭文件的想法錯過了樹木的森林 。 就像說「沒必要擔憂您沒有要求編譯器抱怨沒有看到原型的事實-討厭的stdlib.h是要記住的真正重要的事情!」
  • 它迫使進行額外的認知交叉檢查 。 它將(指定的)所需的類型放在要對該變量的原始大小執行的算術旁邊。 我敢打賭,您能夠進行SO研究,該研究代表在進行強制轉換時, malloc()錯誤的捕獲速度要快得多。 與斷言同樣,揭示意圖的註釋會減小錯誤。
  • 以機器能夠檢查的方式重複本身一般是個主意。 實際上,這就是一個斷言,而對cast的這種使用就是一個斷言。 斷言仍然是咱們使代碼正確的最通用技術,由於Turing早在多年前就提出了這個想法。

#3樓

返回的類型爲void *,能夠將其強制轉換爲所需的數據指針類型,以便將其取消引用。 指針


#4樓

如今不須要malloc()返回的值,可是我想補充一點,彷佛沒有人指出: code

在古代,也就是在ANSI C提供void *做爲指針的通用類型以前, char *是此類用法的類型。 在這種狀況下,強制轉換能夠關閉編譯器警告。 htm

參考: C常見問題解答 get


#5樓

這取決於編程語言和編譯器。 若是在C中使用malloc ,則無需鍵入強制轉換,由於它將自動鍵入強制轉換。可是,若是您使用C ++,則應鍵入強制轉換,由於malloc將返回void*類型。 原型

相關文章
相關標籤/搜索