POSIX中unistd.h的STDIN_FILENO宏在Windows中的等效项是什么?
Windows下标准文件描述符的定义与编码建议
1. Windows里标准文件描述符的定义位置
在MSVC环境中,STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO这些宏是在<corecrt_io.h>中定义的,但你不用特意包含这个头文件——<stdio.h>会自动引入它,所以只要代码里包含了<stdio.h>,就能直接使用这些宏。
和POSIX一致,Windows程序启动时,标准输入、输出、错误对应的文件描述符固定是0、1、2,这是MSVC为了兼容POSIX和C标准做的约定,运行时会预初始化这些描述符。
2. 要不要直接硬编码0?
完全不建议硬编码这类魔法数字,理由如下:
- 可读性更好:
STDIN_FILENO比裸写0表意更清晰,其他开发者一眼就能明白这是标准输入的文件描述符,不需要额外加注释。 - 规范性与可移植性:使用标准宏是遵循C/C++标准库的规范做法,哪怕只在Windows环境跑,也能避免因系统细节变更(虽然概率极低)导致的问题;如果以后要移植到其他POSIX系统,代码也不用修改。
哪怕只考虑Windows平台,用官方定义的宏也更符合微软的编程规范,减少不必要的兼容性风险。
内容的提问来源于stack exchange,提问作者devgirl05
相关产品推荐
相关产品推荐

