不同編譯器對於等號左右兩側執行順序及簡單IO優化

2021-06-28 06:12:19 字數 986 閱讀 3056

最近寫作業遇到的乙個問題,花了兩天時間才解決。

fromparentto ( *g ) = rotateat ( tallerchild ( tallerchild ( g ) ) ); //為了能夠使父節點正常地指向旋轉後的子節點
其中左側為乙個巨集,定義為:

#define fromparentto(x) /*來自父親的引用*/ \

( isroot(x) ? this->_root : ( islchild(x) ? (x).parent->lc : (x).parent->rc ) )

經測試發現在dev-cpp下,這行**會出問題,經過變換後樹的結構變化並不正確。而在vs下無這個問題。

當時就在想出錯的原因是否是因為等是兩側執行的順序不同而導致的,後來有點困了,就先停下來了。第二天助教回郵件也說道可能是這個問題。於是將這句話改為:

if (!g->parent)

this->_root = rotateat ( tallerchild ( tallerchild ( g ) ) );

else if (islchild(*g))

else

困擾兩天的問題終於解決!也驗證了猜想,即由於在dev-cpp中,先執行等式右側**,而導致樹的結構發生變化,再執行等式左側得到的結果已經不是從之前節點g來自父節點的引用。而在vs下結果相反,因此並未**並沒有出問題。

char inbuf [100000]; 

setvbuf(stdin, inbuf, _iofbf, 100000);

之後正常使用scanf,printf等。

總結一下:

1.dev-cpp編譯器會先執行等式右側表示式再執行左側,而vs則相反。

2.儘量減少長**,不僅影響閱讀,還容易出錯。

3.使用setvbuf可以在一定程度上提高讀取速度。

編譯方舟編譯器

環境 mac os parallels desktop 安裝ubuntu 16.04 安裝基礎包 sudo apt get y install openjdk 8 jdk git core gnupg flex bison gperf build essential zip curl zlib1g ...

方舟編譯器編譯

目錄環境變數 安裝 ninja 和 gn 編譯成功 總結2019.9.1 編譯華為方舟編譯器原始碼 這篇文章僅僅是關於如何搭建環境並進行編譯。本機環境 ubuntu 16 server.一定要好好看參考文件!建議使用root賬戶操作 先 clone 原始碼華為開源平台 對應的參考文件openarkc...

Qt設定根據編譯器不同鏈結不同的lib庫

我們知道qt的pro工程檔案中可以編寫編譯條件,根據不同的條件生成不同的編譯指令,常用的是根據系統的不同包含不同的原始檔,如 win32 linux除了原始檔,鏈結的lib檔案也需要在pro中指定,而在windows平台中,可選的編譯器有msvc和mingw兩種,且這兩種編譯器的庫檔案不能通用,那麼...