2016-09-23 1 views
1

Lorsque j'utilise dprintf(), j'obtiens l'avertissement "déclaration implicite de dprintf". Cela tend à signifier qu'un fichier nécessaire n'est pas inclus, mais j'ai déjà inclus stdio.h, qui est censé être tout ce dont il a besoin. Y a-t-il autre chose que dprintf a besoin?dprintf avertissement de déclaration implicite

Répondre

3

La section « feature_test_macros » du page man explique que pour faire stdio.h déclarer dprintf(), vous devez d'abord #define _POSIX_C_SOURCE 200809L (ou plus) avant de #include <stdio.h>. La raison en est que dprintf() n'était pas standardisé avant POSIX.1-2008, mais que <stdio.h> doit continuer à fonctionner avec du code écrit avant cela, même si ce code utilisait son propre identifiant nommé "dprintf". (Définition _GNU_SOURCE ou _XOPEN_SOURCE travaillerait aussi sur Linux, mais _POSIX_C_SOURCE est le meilleur choix pour la portabilité générale.)

2

Vous devrez peut-être définir certaines macros. Mettez au-dessus du dossier, avant toute include s les suivantes

#define _POSIX_C_SOURCE 200809L 
#define _GNU_SOURCE 

(Un cela serait suffisant, mais je ne sais pas la version glibc que vous utilisez)

+0

Ou '#define _XOPEN_SOURCE 700'. Ou '-std = gnu11'. –

+0

En plus du commentaire de @JonathanLeffler: '-std = gnu11' est l'option pour que GCC ne soit pas placé au-dessus du fichier. – deamentiaemundi

0

Vous pouvez consulter pour fprintf()here. J'ai rencontré le même problème et par conséquent j'ai été forcé de fonctionner sur une machine POSIX, je dois changer mon code, donc fprintf() est l'une des (peut-être) options que j'ai eues. Exemple:

fprintf(stderr,"file not found");