2016-09-23 112 views
1

當使用dprintf()時,我收到警告「隱式聲明dprintf」。這往往意味着一個必要的文件不包括在內,但我已經包含了stdio.h,它應該是它所需要的。還有其他的dprintf需求嗎?dprintf隱式聲明警告

回答

3

手冊頁解釋說,要使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是一般便攜性的最佳選擇。)

2

您可能需要設置一些宏。放在文件的頂部,在任何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

0

您可以查找fprintf()here

我遇到了同樣的問題,因此我被迫在基於POSIX的機器上運行,我必須更改我的代碼,所以fprintf()是我的許多選項之一(可能)。例如:

fprintf(stderr,"file not found");