[英]warning on type casting in C
在C中, strlen
返回一個unsigned long
。
我正在使用一個int
變量來存儲它。 為什么沒有警告?
有人會在什么時候會發出警告,何時才不會發出警告?
將算術類型T1
的值分配給另一個算術類型T2
的對象時,C不需要任何診斷。
當您分配一個不適合對象的文字值時(在其他情況下,但是C並不需要它),很多實現都會發出信息診斷。
C
對類型安全性不嚴格,因此符合要求的實現可以選擇不發出警告。
如果希望警告避免任何此類類型安全問題,則可以為編譯器嘗試一些選項,包括詳細警告, -Wall
或類似選項。
這是C
的陷阱之一,就好像值大於signed int
可以表示的值一樣,行為是實現定義的。
編輯
引用6.3.1.3有符號和無符號整數
將具有整數類型的值轉換為_Bool以外的其他整數類型時,如果該值可以用新類型表示,則該值不變。
否則,如果新類型是無符號的,則通過重復添加或減去比新類型中可以表示的最大值多一個值來轉換該值,直到該值在新類型的范圍內為止。
否則,將對新類型進行簽名,並且無法在其中表示值; 結果是實現定義的,還是引發實現定義的信號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.