You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需包含stdio.h/stdlib.h,哪个windows.h头文件定义了NULL?

关于Windows代码中NULL定义的问题

<windows.h>确实会间接定义NULL,完全不需要额外包含<stdio.h>或<stdlib.h>。

具体来说,<windows.h>会引入<winnt.h>,而<winnt.h>里就有NULL的标准定义(通常是#define NULL ((void*)0),会根据编译环境做适配)。你可以直接在仅包含<windows.h>的Windows专属代码里使用NULL做空指针检查。

举个最简示例:

#include <windows.h>

void WindowsOnlyFunction() {
    HANDLE hFile = CreateFileW(L"test.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile == NULL) {
        // 处理文件打开失败逻辑
    }
}

如果要和Linux代码做分离,用条件编译即可,避免头文件交叉引入:

#ifdef _WIN32
#include <windows.h>
void PlatformSpecificLogic() {
    LPVOID buffer = HeapAlloc(GetProcessHeap(), 0, 1024);
    if (buffer == NULL) {
        // Windows下的内存分配失败处理
    }
}
#else
#include <stdlib.h>
void PlatformSpecificLogic() {
    void* buffer = malloc(1024);
    if (buffer == NULL) {
        // Linux下的内存分配失败处理
    }
}
#endif

内容的提问来源于stack exchange,提问作者iloveclang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:05:37