在Windows上__LP64__?

我知道Windows使用LLP而不是LP数据模型,但有一个预定义的variables或东西? 在OS X / Linux上,您可以使用__LP64__

一种检查方法是_WIN64 ,它仅在64位Windows上定义(请参阅此处和此处 )。 例如:

 #if defined(__LP64__) // LP64 machine, OS X or Linux #elif defined(_WIN64) // LLP64 machine, Windows #else // 32-bit machine, Windows or Linux or OS X #endif 

你真的需要一个预处理器变量(取决于具体情况,这可能是必需的,但你也可以不做)? sizeof(long) == sizeof(void*)不够好吗?

我不知道如果这样的变量,但你可以测试_MSC_VER ,这将在Visual Studio中定义。 那么你可以假设一个LLP模型。 如果将来发生变化,可以使用_MSC_VER的值对编译器版本进行测试。

如果您正在寻找标准大小的类型,请查看boost :: integer ,它定义了固定位大小的整数类型。