1

使用dprintf()时,我收到警告“dprintf 的隐式声明”。这往往意味着没有包含必要的文件,但我已经包含了 stdio.h,这应该是它所需要的全部。dprintf 还有其他需要吗?

4

3 回答 3

3

手册页的“feature_test_macros”部分解释说,要使 stdio.h 声明 dprintf(),您必须首先#define _POSIX_C_SOURCE 200809L(或更高)在您之前#include <stdio.h>。原因是 dprintf() 直到 POSIX.1-2008 才标准化,但<stdio.h>需要继续使用之前编写的代码,即使该代码使用其自己的名为“dprintf”的标识符。(定义 _GNU_SOURCE 或 _XOPEN_SOURCE 也适用于 Linux,但 _POSIX_C_SOURCE 是一般可移植性的最佳选择。)

于 2016-09-24T00:25:29.440 回答
2

您可能需要设置一些宏。放在文件顶部,在include以下任何 s之前

#define _POSIX_C_SOURCE  200809L
#define _GNU_SOURCE

(其中一个就足够了,但我不知道您使用的 GLibC 版本)

于 2016-09-24T00:02:38.813 回答
0

fprintf() 你可以在这里查找。

我遇到了同样的问题,因此我被迫在基于 POSIX 的机器上运行,我必须更改我的代码,所以fprintf()(可能是)我拥有的许多选项之一。例子 :

fprintf(stderr,"file not found");
于 2018-01-31T17:28:05.453 回答