dprintf隐式声明警告

时间:2016-09-23 23:53:36

标签: c warnings implicit-declaration

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

3 个答案:

答案 0 :(得分: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是一般可移植性的最佳选择。)

答案 1 :(得分:2)

您可能需要设置一些宏。在任何include以下

之前放在文件的顶部
#define _POSIX_C_SOURCE  200809L
#define _GNU_SOURCE

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

答案 2 :(得分:0)

您可以查找fprintf() here

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

fprintf(stderr,"file not found");