无需包含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
相关产品推荐
相关产品推荐

