2
編寫一個函數回調函數庫,我經常對具有相同調用約定和相同簽名的類型進行類型化(和調用)函數指針,但有一個例外:它們具有參數指向到不同類型(所有數據)或無效指針。C函數指針類型兼容性
最近,我發現它可能不是安全的,根據這個:https://stackoverflow.com/a/14044244/3079266
基本上,我的理解是,如果參數類型是兼容的,這意味着該函數指針類型也兼容,應該沒有問題。
現在,我有3個問題。
第一:這是否意味着,由於指向不同類型的指針在技術上是不兼容的,我所做的操作會導致未定義的行爲?
第二:我可以在哪裏(在哪些架構上)擺脫它?它們之間是Windows x86還是x64版本?
第三:我在哪裏不能擺脫它?
@iharob但你傳遞給這些函數的函數指針*必須帶有'void'指針或者你有未定義的行爲。在函數內部投射指針是可以的,但參數應該如指定的那樣。 –
第一個問題:是的。第二個問題:到處。第三個問題:沒有任何地方(除了當你回答這個問題時,這裏的人們喜歡UB,如果你沒有在需要的時候提及它,就會投票給你)。 –
@barakmanos:所以,我可能只是警告用戶,_technically_,這可能會導致UB,但實際上不會?謝謝! =) – Mints97