簡體   English   中英

gcc -O3,數據指針似乎丟失了

[英]gcc -O3 , data pointer seems to get lost

根據優化級別,輸出結果如下:

輸出意外:

$ gcc -Wall -O3  otest.c -o otest                   
$ otest                                             
*x: 0 
y: 2048.899902 
y: 0.000000 

預期輸出:

$ gcc -Wall -O2  otest.c -o otest 
$ otest                           
*x: 45000e66 
y: 0.000000 
y: 2048.899902

源代碼 :

#include <stdio.h>
int main(void)
{
   float y = 2048.9;
   void *p = &y;
   unsigned int *x = p;
   printf(" *x: %x \n",*x);
   *x = 0; 
   printf(" y: %f \n",y);
   *x = 0x45000e66;
   printf(" y: %f \n",y);  
   return 0;
 }

gcc版本是4.2.1。

我錯過任何重要的指示嗎?

是。 您的代碼違反了嚴格的別名規則(當您有float ,但是通過指向unsigned int的指針訪問它,這是一個不兼容的類型),調用了未定義的行為,因此允許編譯器對您的代碼執行任何其喜歡的操作,包括完全消除其中的一部分。

暫無
暫無

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

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