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”部分
答
您可以查找fprintf()
here。
我遇到了同样的问题,因此我*在基于POSIX的机器上运行,我必须更改我的代码,所以fprintf()
是我的许多选项之一(可能)。例如:
fprintf(stderr,"file not found");
或者'#define _XOPEN_SOURCE 700'。或者'-std = gnu11'。 –
除了@JonathanLeffler的评论:'-std = gnu11'是GCC不能放在文件顶部的选项。 – deamentiaemundi