dprintf隐式声明警告

问题描述:

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

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

您可能需要设置一些宏。放在文件的顶部,在任何include S中的以下

#define _POSIX_C_SOURCE 200809L 
#define _GNU_SOURCE 

(其中之一,这将是足够的,但我不知道你用glibc的版本)的的“feature_test_macros”部分

+0

或者'#define _XOPEN_SOURCE 700'。或者'-std = gnu11'。 –

+0

除了@JonathanLeffler的评论:'-std = gnu11'是GCC不能放在文件顶部的选项。 – deamentiaemundi

您可以查找fprintf()here

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

fprintf(stderr,"file not found");