根據
這里發生了什么事?
為了解決這個問題,我發現自己在使用:
#if MIN_VERSION_base(4,16,0)
但為什么MIN_VERSION_GLASGOW_HASKELL行不通?
uj5u.com熱心網友回復:
GHC 版本由主要版本、次要版本、第一個補丁級別和可選的第二個補丁級別組成。所以GHC 9.2.1有major 9,minor 2,第一個patchlevel 1,沒有第二個patch level。
GHC 中存在一個錯誤,可能自MIN_VERSION_GLASGOW_HASKELL引入宏以來就存在,其中該宏依賴于__GLASGOW_HASKELL_PATCHLEVEL2__未定義的宏變數,就像通常發布版本一樣,GHC 版本只有一個補丁級別(如9.2.1)。
這通常無關緊要,除非-Wcpp-undef標志生效并且測驗是在與主要、次要和第一個補丁級別匹配的版本上執行的。然后,對第二個補丁級別的檢查將生成編譯器警告訊息。(盡管它看起來像是“錯誤”而不是警告,但編譯似乎已完成。)
您可以通過以下方式解決此問題:
忽略它——盡管看起來,它看起來只是一個警告,而不是一個錯誤,編譯應該完成
-Wcpp-undef通過洗掉標志或在可行的情況下添加標志來關閉-Wno-cpp-undef;在呼叫宏之前添加一些代碼來定義缺少的補丁級別:
#ifndef __GLASGOW_HASKELL_PATCHLEVEL2__ #define __GLASGOW_HASKELL_PATCHLEVEL2__ 0 #endif
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427278.html
上一篇:函式應用的優先級
