C 标准库中是否有任何函数隐式使用“stderr”?
Do any functions in the C standard library implicitly use `stderr`?
C 规范要求所有 C 程序都打开并可用 3 个流:stdout
、stdin
、stderr
。
用户可以根据自己的喜好使用这些流,例如:
fprintf(stdout, "lol");
fputs("oops", stderr);
fgets(buffer, 20, stdin);
C 标准库中的一些函数隐含地使用了这些,例如:
printf("lol"); /* implicitly uses stdout */
puts("rofl"); /* implicitly uses stdout */
int c = getchar(buffer); /* implicitly uses stdin */
- C 标准库中的 任何 函数是否隐式使用
stderr
?
- 在 C 标准库(例如 Linux 上的 GNU 的 glibc)的常见实现中做 any 函数隐式使用
stderr
?
assert
宏和perror
函数写入标准错误流。 abort_handler_s
函数(在可选的附件 K 中)也是如此。
exit
关闭文件并刷新流,因此它隐式作用于标准错误流。 _Exit
和 abort
可以这样做; C 标准允许但不要求它。 fflush(NULL)
刷新所有流。
C 2018 7.21.3 3 描述了输入流和输出流之间的一些交互:在无缓冲流或行缓冲流上请求输入并且需要来自主机环境的字符,然后刷新行缓冲流。这可能会影响标准错误流。
根据可选的 C 2018 Annex J,C 实现可能会将一些浮点诊断写入标准错误流,作为正常程序终止的一部分。
在 C 2018 标准中搜索“标准错误流”和“stderr”不会显示标准库中标准错误流的任何其他隐式使用。
C 规范要求所有 C 程序都打开并可用 3 个流:stdout
、stdin
、stderr
。
用户可以根据自己的喜好使用这些流,例如:
fprintf(stdout, "lol");
fputs("oops", stderr);
fgets(buffer, 20, stdin);
C 标准库中的一些函数隐含地使用了这些,例如:
printf("lol"); /* implicitly uses stdout */
puts("rofl"); /* implicitly uses stdout */
int c = getchar(buffer); /* implicitly uses stdin */
- C 标准库中的 任何 函数是否隐式使用
stderr
? - 在 C 标准库(例如 Linux 上的 GNU 的 glibc)的常见实现中做 any 函数隐式使用
stderr
?
assert
宏和perror
函数写入标准错误流。 abort_handler_s
函数(在可选的附件 K 中)也是如此。
exit
关闭文件并刷新流,因此它隐式作用于标准错误流。 _Exit
和 abort
可以这样做; C 标准允许但不要求它。 fflush(NULL)
刷新所有流。
C 2018 7.21.3 3 描述了输入流和输出流之间的一些交互:在无缓冲流或行缓冲流上请求输入并且需要来自主机环境的字符,然后刷新行缓冲流。这可能会影响标准错误流。
根据可选的 C 2018 Annex J,C 实现可能会将一些浮点诊断写入标准错误流,作为正常程序终止的一部分。
在 C 2018 标准中搜索“标准错误流”和“stderr”不会显示标准库中标准错误流的任何其他隐式使用。