c 列舉在跨平台下的陷進

2021-05-10 22:04:52 字數 633 閱讀 7962

看上去一切正常,windows伺服器下也執行正常,但linux伺服器下卻無法自動觸發事件(後來發現,應該也無法顯式觸發事件,但eventid在設定觸發狀態時被強轉賦值了另乙個int,避免了這個問題,也增加了問題的隱蔽性。)

gdb除錯後發現event.prvindex,event.curindex都為64位,且低32位正常,而高32位隨機。

問題在於linux下**(3)強轉64位的列舉位址為32位int位址,且helpeventdata::curindex等沒有初始化為0。修改**可以引入乙個int臨時變數解決。

問題1、helpeventindex列舉的sizeof在vc8裡為4,gcc裡為8,從helpeventindex的phe_force_dword(-1 or unsigned 0xffffffff)可以理解這2者的差異。

問題2、phe_illegalindex和phe_force_dword的定義顯得很詭異,有意思的是phe_force_dword得初衷在於使**(3)能夠強轉而少用乙個臨時變數。

問題3、有這樣一種解決方案,不顯式使用helpeventindex,轉而完全使用int替代運算,確實可以避免這些問題,不過enum的定義變成了傀儡,基本沒意義了。

結論:使用列舉型別時需要特別小心,初始化的意義往往在**出問題後才能體會到。

在Linux上在mono平台下執行C 程式

乙個名字為mono的專案,它的目標就是把.net及其程式語言移植到非windows的平台上。在任何乙個平台 作業系統 硬體體系 上,編寫和執行程式的三個最根本的需求是庫 編譯器 直譯器 執行環境。庫以類和方法 函式 的形式提供常用的例 程,簡化大型程式的編寫。net框架也不例外,包含了許多類庫。另外...

pip在不同平台下的安裝

pip類似redhat裡面的yum,安裝python包非常方便。本節詳細介紹pip的安裝 以及使用方法。要先安裝python和easy install,這樣安裝其他軟體就方便了很多。windows下安裝 python的指令碼路徑放入了path中 1 用easy install安裝pip。在cmd中輸...

easy install在不同平台下的安裝

為什麼要裝easy install?python setup.py install 來進行安裝。這樣是不是很繁瑣呢?如果我們直接命令列執行 easy install twisted 就把最新版的twisted包裝上去了,是不是很爽呢?所以easy install就是為了我們安裝第三方擴充套件包更容易...