簡體   English   中英

以下分配僅導致警告。 關於C如何對待類型等價,這說了什么?

[英]The following assignment only causes a warning. What does this say about how C treats type equivalence?

以下分配僅導致警告。 關於C如何對待類型等價,這說了什么?

int *iptr;
float *fptr;
float fval;
fval = 0.0;
fptr = &fval;
iptr = fptr;

特別是,我指的是上面代碼片段的最后一行中的賦值; 即,

iptr = fptr;

它更多地說明了你使用的編譯器的行為而不是關於C的行為,盡管C標准允許編譯器的行為(不幸的是恕我直言)。

int*float*類型是不同的,語言定義它們之間沒有隱式轉換。

嘗試在沒有強制轉換的情況下將一個分配給另一個(即顯式類型轉換)是違反約束 ,這意味着需要編譯器發出診斷消息。

C標准不要求這種診斷是致命的。 通過發出警告,就C標准而言,編譯器已完成其工作。 它可以在相同的有效性下拒絕您的程序(在我看來,這將更加用戶友好)。 但這兩種行為都是一致的。

您可以以某種方式調用編譯器,使其將其視為致命錯誤。 例如,如果您正在使用gcc -pedantic-errors選項(以及指定要使用哪個版本的C標准的選項)應該可以解決問題。

如果你真的想要執行該任務(包含所有需要的風險),你可以使用強制轉換:

iptr = (int*)fptr;

除了(可能)關閉編譯器警告,指針應該投作為你正在做的事情非常棘手的提醒,它可能在你的臉上吹,如果你don'w知道你在做什么

暫無
暫無

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

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