現象
在 `.cpp` 文件頂部定義 `#define _USE_32BIT_TIME_T`,但 `sizeof(time_t)` 仍為 8 (64位),未生效。
原因
宏**必須在包含任何 CRT 頭文件 (如 ``, ``, `stdafx.h`) 之前定義**。
`stdafx.h` (預編譯頭) 通常已包含 ``,若在 `stdafx.h` 之後定義,CRT 內部已按 64 位編譯 `time_t`,宏無效。
修正方法
- 移至 `stdafx.h` 最頂部 (在所有 `#include` 之前):
// stdafx.h
#define _USE_32BIT_TIME_T // ← 第一行
#include
#include
#include
...
- 或專案屬性 → C/C++ → Preprocessor → Preprocessor Definitions 添加 `_USE_32BIT_TIME_T` (全局生效,無需修改代碼)。
驗證
cout << sizeof(time_t) << endl; // 應輸出 4
注意
- 32 位 `time_t` 範圍至 2038 年 (Y2038 問題),**現代應用請保持 64 位**,除非維護極舊代碼/嵌入式平台。
- VS2010 已停止主流支持,**強烈建議升級至 VS2022** 獲得 C++17/20/23 支援、更好診斷、安全更新。