排查方法
- IDE 全局搜索
j1(區分大小寫、整詞匹配)。
- 檢查:
long double V1,j1,j2... 行是否在**頭文件**中,被多個 `.cpp` 包含導致多重定義。
- 若必須跨文件共享:
— 头文件声明 extern long double j1;
— 單一 `.cpp` 定義 long double j1;
代碼異味
列表中出現數百個全局變量(`a1..a38`, `o1..o35`, `b1..b10`...),**強烈建議重構**:
- 封裝為結構體/類:`struct Params { long double a[38]; char o[35][12]; ... };`
- 單例或依賴注入傳遞上下文,消除全局狀態。
- 使用命名空間隔離:`namespace Config { extern long double j1; }`
編譯器輔助
- GCC/Clang: `-fno-common` 強制報錯 tentative definition 重複。
- MSVC: `/Zc:strictStrings` 等嚴格模式。