![](/img/trans.png)
[英]When we used malloc without declaring stdlib.h header file compiler returns an int why?
[英]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.