> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Xbox 上的 Microsoft Game Development Kit 预处理器定义

> Microsoft Game Development Kit on XBOX 预处理器定义

本文列出了 XBOX 上 Microsoft Game Development Kit (GDK) 特有的预处理器定义。

| 预处理器定义 | 描述 |
| - | - |
| \_GAMING\_XBOX | 表示 XBOX One 或 XBOX Series X\|S 的官方定义。#ifdef \_GAMING\_XBOX // Microsoft Game Development Kit (GDK) on XBOX。... |
| \_GAMING\_XBOX\_XBOXONE | 该定义表示正在为 XBOX One 上的 GDK 生成代码。 |
| \_GAMING\_XBOX\_SCARLETT | 该定义表示正在为 XBOX Series X\|S 上的 GDK 生成代码。 |
| \_GAMING\_DESKTOP | 该定义表示正在 PC 上使用 GDK 生成代码。 |
| \_M\_X64、\_M\_IX86、\_M\_ARM64 与 \_M\_ARM | 当你要编写针对特定处理器架构（而非平台）的代码时，请使用这些定义。对于 XBOX 360，等效的定义是 \_M\_PPCBE。\_M\_AMD64 是 \_M\_X64 的别名，是最初的名称，正在被逐步淘汰，改用 \_M\_X64。不要使用 Windows 遗留的定义，例如 *X86* 和 *AMD64*。 |
| WINAPI\_FAMILY | Microsoft 平台标头广泛使用 winapifamily.h 中定义的 Windows 家族和分区宏。请记住，分区可能会（实际上在 Windows 8.0 SDK 与 Windows 8.1 SDK 之间已经）发生变化。随着时间的推移，还会加入新的 PARTITION 和 FAMILY 值。客户端代码绝不应直接使用 PARTITION 值、WINAPI\_FAMILY\_PARTITION 宏或 WINAPI\_FAMILY\_ONE\_PARTITION 宏。客户端代码可以合理地检测 WINAPI\_FAMILY 的特定值。Windows 8.1 SDK 版本的 winapifamily.h 提供了详细注释块来说明这种用法。 |

对于 XBOX 上的 Microsoft Game Development Kit (GDK) 代码，请使用以下预处理器定义。

```cpp theme={null}
#ifdef _GAMING_XBOX
// GDK on Xbox
```

```cpp theme={null}
#ifdef _GAMING_XBOX_SCARLETT
// Xbox Series X|S hardware
#elif _GAMING_XBOX_ONE
// Xbox One hardware
```

当你使用 Microsoft Game Development Kit (GDK) 进行生成时，Visual Studio 集成开发环境 (IDE) 的 Microsoft Build 规则会自动定义 `_GAMING_XBOX` 和 `WINAPI_FAMILY=WINAPI_FAMILY_GAMES`。不使用 Visual Studio IDE 针对 Microsoft Game Development Kit (GDK) 进行生成的开发者，必须在编译器命令行上提供这些值。

## Gaming.Xbox.XboxOne.x64

```
/D_GAMING_XBOX /D_GAMING_XBOX_XBOXONE /DWINAPI_FAMILY=WINAPI_FAMILY_GAMES  
```

## Gaming.Xbox.Scarlett.x64

```
/D_GAMING_XBOX /D_GAMING_XBOX_SCARLETT /DWINAPI_FAMILY=WINAPI_FAMILY_GAMES  
```

## Gaming.Desktop.x64

```
/D_GAMING_DESKTOP /DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP
```

> 使用 Microsoft Game Development Kit 时，这些定义也适用于“经典”x64 平台。

在编写 Microsoft 跨平台代码时，可以使用以下结构。

```cpp theme={null}
    #if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
    // This code is for Win32 desktop apps.
    #elif WINAPI_FAMILY == WINAPI_FAMILY_GAMES
    // This code is for the Microsoft Game Development Kit (GDK) (could also use _GAMING_XBOX if only targeting Xbox).
    #elif WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP
    // This code is for Windows phone 8.x.
    #elif WINAPI_FAMILY == WINAPI_FAMILY_APP
    // This code is for Microsoft Store apps for 8.x.
    #elif WINAPI_FAMILY == WINAPI_FAMILY_TV_TITLE
    // This code is for Xbox One Game OS/XDK.
    #elif WINAPI_FAMILY == WINAPI_FAMILY_TV_APP
    // This code is for Xbox One System OS/ADK.
    #else
    #error Unknown WINAPI_FAMILY value
    #endif  
```


## Related topics

- [面向主机开发的 Visual Studio](https://docs.xbox.com/zh-CN/tools/tools-console/visualstudio/visualstudio.md)
- [在 Microsoft Game Development Kit (GDK) 中使用 Clang](https://docs.xbox.com/zh-CN/tools/tools-pc/visualstudio/gr-vs-clang.md)
- [Visual Studio(目录)](https://docs.xbox.com/zh-CN/tools/tools-pc/visualstudio/gr-visualstudio-toc.md)
- [在主机版 Microsoft Game Development Kit (GDK) 中使用 Clang](https://docs.xbox.com/zh-CN/tools/tools-console/visualstudio/vs-clang.md)
- [Visualstudio](https://docs.xbox.com/zh-CN/tools/tools-console/visualstudio/index.md)
