簡體   English   中英

為什么編譯器假定malloc返回一個int?

[英]Why does the compiler assume that malloc returns an int?

我知道在C語言中,最好不要轉換malloc()的返回值。 我讀過,如果您不包括stdlib.h ,則編譯器會假設malloc()返回一個int。 當然,如果您嘗試將int隱式分配給不是int的對象,則會產生錯誤,但是該錯誤可能會被顯式強制轉換掩蓋-因此存在顯式強制轉換malloc()的危險。

對於我創建的任何函數,如果該函數不存在,則編譯器會告訴我。 為什么即使您未包括stdlib.h ,編譯器仍假定malloc()返回int? 除非包含stdlib.h否則malloc()是否應該保持未定義狀態?

實際上,如果編譯器沒有看到您調用的任何函數的聲明(不僅僅是malloc),它將假定它是extern並返回int 除非您提高警告級別,否則我使用的大多數編譯器僅對此給出警告,而不是錯誤。

這可以追溯到C的早期,我認為C99不允許這樣做。

@Michael的評論:根據K&R(第72頁),您似乎是正確的:

如果在表達式中出現一個之前未聲明的名稱,並在其后加上左括號,則上下文將其聲明為函數名稱,假定該函數返回一個int值,並且不假設其參數成立。

就像@Burkhard所說的,這是默認設置。 如果您尚未為函數定義原型,則編譯器將發出警告,並假定該函數返回int。 然后,如果您尚未真正定義它,則鏈接器將是一個使您立即停止錯誤的鏈接器。

這是每個功能的默認設置。

我的編譯器告訴我,如果未定義函數,則未定義int testFunction()

除非另有說明,否則假定所有函數默認都返回int

這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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