Discussion:
snprintf ...
(trop ancien pour répondre)
fanny Chevalier
2003-10-06 14:56:03 UTC
Permalink
Bonjour,

Je cherche à utiliser sous Visual Net (c++) la fonction snprintf.
J'inclue l'en-tete <iostream> propre à Windows mais ça ne compile
pas, il ne trouve pas la référence à la fonction...
En incluant <stdio> non plus...

Quelqu'un sait-il comment faire?
Si oui merci de m'indiquer comment.

--
Fanny
David Brabant
2003-10-06 15:28:29 UTC
Permalink
Post by fanny Chevalier
Je cherche à utiliser sous Visual Net (c++) la fonction snprintf.
J'inclue l'en-tete <iostream> propre à Windows mais ça ne compile
pas, il ne trouve pas la référence à la fonction...
En incluant <stdio> non plus...
1. Ce n'est pas du C++;
2. La fonction s'appelle _snprintf (avec un underscore)
et elle est définie dans <stdio.h>
3. Dans ce genre de situation, grep est ton ami.
--
David
k***@gabi-soft.fr
2003-10-07 08:01:59 UTC
Permalink
Post by David Brabant
Post by fanny Chevalier
Je cherche à utiliser sous Visual Net (c++) la fonction snprintf.
J'inclue l'en-tete <iostream> propre à Windows mais ça ne compile
pas, il ne trouve pas la référence à la fonction... En incluant
<stdio> non plus...
1. Ce n'est pas du C++;
Mais c'est du C.
Post by David Brabant
2. La fonction s'appelle _snprintf (avec un underscore)
et elle est définie dans <stdio.h>
Pas en C.
Post by David Brabant
3. Dans ce genre de situation, grep est ton ami.
Je dirais plutôt de la documentation. Parce qu'avec grep (en supposant
même qu'il l'a sous Windows), d'abord, il faut aussi savoir où se trouve
les en-têtes en question, et puis, il y a de fortes chances qu'il trouve
snprintf bien dans <stdio.h> -- seulement, avec une compilation
conditionnelle qui fait que le compilateur ne le voit que si on compile
en C.

--
James Kanze GABI Software mailto:***@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Anthony Fleury
2003-10-06 15:34:14 UTC
Permalink
Post by fanny Chevalier
Bonjour,
Je cherche à utiliser sous Visual Net (c++) la fonction snprintf.
J'inclue l'en-tete <iostream> propre à Windows mais ça ne compile
pas, il ne trouve pas la référence à la fonction...
En incluant <stdio> non plus...
<iostream> n'est pas propre à windows... c'est un en-tête standard défini
dans la norme du C++.
Quant à la fonction snprintf() c'est une fonction héritée de la bibliothèque
standard du C, si tu fais du c++ tu pourrais donc utiliser les IOStreams
plutot.

Pour utiliser snprintf() tu dois inclure <cstdio>. Tous les en tête de la
norme du C en C++ sont de la forme <cX> pour l'en tête <X.h> en C. De plus
les fonctions sont alors placés dans le namespace std. L'utilisation de
snprintf() revient donc à écrire std::snprintf().

--
Anthony
k***@gabi-soft.fr
2003-10-07 08:07:41 UTC
Permalink
Post by Anthony Fleury
Post by fanny Chevalier
Je cherche à utiliser sous Visual Net (c++) la fonction snprintf.
J'inclue l'en-tete <iostream> propre à Windows mais ça ne compile
pas, il ne trouve pas la référence à la fonction... En incluant
<stdio> non plus...
<iostream> n'est pas propre à windows... c'est un en-tête standard
défini dans la norme du C++. Quant à la fonction snprintf() c'est une
fonction héritée de la bibliothèque standard du C, si tu fais du c++
tu pourrais donc utiliser les IOStreams plutot.
C'est plus complexe que ça. C'est une fonction qui n'est devenue partie
de C qu'après la norme C++ a été adoptée. Elle n'est donc pas héritée de
C ; elle n'existe pas en C++.

Dans la pratique, tout dépend du compilateur :

- Il y en a qui s'en fout de C99. La fonction n'y est pas, tout
simplement.

- La fonction y est, comme une extension. C'est une extension
illégale, puisque le programme suivant est du C++ légal :

#include <stdio.h>

int snprintf = 42 ;

Mais c'est une extension bien utile quand même.

- La fonction y est, mais protétée par les gardes de compilation
conditionnelle, de façon que tu ne la vois pas en C++ (au moins
éventuellement de donner des options supplémentaires sur la ligne de
commande pour activer les extensions). C'est à mon avis la meilleur
solution.

--
James Kanze GABI Software mailto:***@gabi-soft.fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
Loading...