je me pose une question par rapport a la maniere classique de vider le
buffer associe a stdin:
c = getchar();
if (c != \n)
while ( (getchar()) != \n) {
};
Que se passe t-il si stdin ne contient aucun \n? (fichier contenant une
ligne mais aucun \n par exemple). Dans ce cas, il me semble que l'on
pourrait avoir un probleme non?
Comment feriez vous pour resoudre ce probleme? (J'ai bien une petite
idee mais je prefere savoir si c'est la bonne..;) )
| Emmanuel Delahaye writes: | | > il me semble que | > ce qui est extern "C" n'est pas soumis aux lois du C++ | | Pas pour ce qui est de l'analyse syntaxique.
Cela ne s'arrête pas à l'analyse syntaxique -- du point de vue de C++, c'est du C++. Sémantique comprise.
-- Gaby
drkm <usenet.fclcxx@fgeorges.org> writes:
| Emmanuel Delahaye <emdel@YOURBRAnoos.fr> writes:
|
| > il me semble que
| > ce qui est extern "C" n'est pas soumis aux lois du C++
|
| Pas pour ce qui est de l'analyse syntaxique.
Cela ne s'arrête pas à l'analyse syntaxique -- du point de vue de C++,
c'est du C++. Sémantique comprise.
| Emmanuel Delahaye writes: | | > il me semble que | > ce qui est extern "C" n'est pas soumis aux lois du C++ | | Pas pour ce qui est de l'analyse syntaxique.
Cela ne s'arrête pas à l'analyse syntaxique -- du point de vue de C++, c'est du C++. Sémantique comprise.
-- Gaby
Laurent Deniau
Emmanuel Delahaye wrote:
Jean-Marc Bourguet wrote on 08/11/04 :
Emmanuel Delahaye writes:
Jean-Marc Bourguet wrote on 08/11/04 :
Je ne connais pas assez le C++ pour l'affirmer, mais il me semble que ce qui est extern "C" n'est pas soumis aux lois du C++, mais à celles du C.
Non. C'est du C++, la seule chose est que la génération de code est compatible avec le C (p.e. le name mangling est celui du C -- ce qui fait qu'une seule fonction extern "C" peut avoir un nom donné par exemple -- les conventions d'appel sont celles du C, ...)
M'embête, lui... et mes beaux this alors ?
Tu fais comme en SmallTalk, tu utilises self.
Good! C'est pas déposé au moins ?
Si, c'est Objective-C.
a+, ld.
Emmanuel Delahaye wrote:
Jean-Marc Bourguet wrote on 08/11/04 :
Emmanuel Delahaye <emdel@YOURBRAnoos.fr> writes:
Jean-Marc Bourguet wrote on 08/11/04 :
Je ne connais pas assez le C++ pour l'affirmer, mais il me semble
que ce
qui est extern "C" n'est pas soumis aux lois du C++, mais à celles du
C.
Non. C'est du C++, la seule chose est que la génération de
code est compatible avec le C (p.e. le name mangling est
celui du C -- ce qui fait qu'une seule fonction extern "C"
peut avoir un nom donné par exemple -- les conventions
d'appel sont celles du C, ...)
Je ne connais pas assez le C++ pour l'affirmer, mais il me semble que ce qui est extern "C" n'est pas soumis aux lois du C++, mais à celles du C.
Non. C'est du C++, la seule chose est que la génération de code est compatible avec le C (p.e. le name mangling est celui du C -- ce qui fait qu'une seule fonction extern "C" peut avoir un nom donné par exemple -- les conventions d'appel sont celles du C, ...)
M'embête, lui... et mes beaux this alors ?
Tu fais comme en SmallTalk, tu utilises self.
Good! C'est pas déposé au moins ?
Si, c'est Objective-C.
a+, ld.
Charlie Gordon
"Emmanuel Delahaye" wrote in message news:
Jean-Marc Bourguet wrote on 08/11/04 :
Je ne connais pas assez le C++ pour l'affirmer, mais il me semble que ce qui est extern "C" n'est pas soumis aux lois du C++, mais à celles du C.
Non. C'est du C++, la seule chose est que la génération de code est compatible avec le C (p.e. le name mangling est celui du C -- ce qui fait qu'une seule fonction extern "C" peut avoir un nom donné par exemple -- les conventions d'appel sont celles du C, ...)
M'embête, lui... et mes beaux this alors ?
Tu ruses :
#ifdef __cplusplus extern "C" { #define this this__ #endif
... ton bô code C tout plein de mots clés interdits ...
#ifdef __cplusplus #undef this } #endif
C'est crade, je sais.
Chqrlie.
"Emmanuel Delahaye" <emdel@YOURBRAnoos.fr> wrote in message
news:mn.45607d4b93112102.15512@YOURBRAnoos.fr...
Jean-Marc Bourguet wrote on 08/11/04 :
Je ne connais pas assez le C++ pour l'affirmer, mais il me semble que ce
qui est extern "C" n'est pas soumis aux lois du C++, mais à celles du
C.
Non. C'est du C++, la seule chose est que la génération de
code est compatible avec le C (p.e. le name mangling est
celui du C -- ce qui fait qu'une seule fonction extern "C"
peut avoir un nom donné par exemple -- les conventions
d'appel sont celles du C, ...)
M'embête, lui... et mes beaux this alors ?
Tu ruses :
#ifdef __cplusplus
extern "C" {
#define this this__
#endif
... ton bô code C tout plein de mots clés interdits ...
Je ne connais pas assez le C++ pour l'affirmer, mais il me semble que ce qui est extern "C" n'est pas soumis aux lois du C++, mais à celles du C.
Non. C'est du C++, la seule chose est que la génération de code est compatible avec le C (p.e. le name mangling est celui du C -- ce qui fait qu'une seule fonction extern "C" peut avoir un nom donné par exemple -- les conventions d'appel sont celles du C, ...)
M'embête, lui... et mes beaux this alors ?
Tu ruses :
#ifdef __cplusplus extern "C" { #define this this__ #endif
... ton bô code C tout plein de mots clés interdits ...
#ifdef __cplusplus #undef this } #endif
C'est crade, je sais.
Chqrlie.
Emmanuel Delahaye
Charlie Gordon wrote on 09/11/04 :
M'embête, lui... et mes beaux this alors ?
Tu ruses :
#ifdef __cplusplus extern "C" { #define this this__ #endif
... ton bô code C tout plein de mots clés interdits ...
#ifdef __cplusplus #undef this } #endif
C'est crade, je sais.
C'est pas si mal...
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Charlie Gordon wrote on 09/11/04 :
M'embête, lui... et mes beaux this alors ?
Tu ruses :
#ifdef __cplusplus
extern "C" {
#define this this__
#endif
... ton bô code C tout plein de mots clés interdits ...
#ifdef __cplusplus
#undef this
}
#endif
C'est crade, je sais.
C'est pas si mal...
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
#ifdef __cplusplus extern "C" { #define this this__ #endif
... ton bô code C tout plein de mots clés interdits ...
#ifdef __cplusplus #undef this } #endif
C'est crade, je sais.
C'est pas si mal...
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
drkm
Emmanuel Delahaye writes:
Charlie Gordon wrote on 09/11/04 :
M'embête, lui... et mes beaux this alors ?
Tu ruses :
#ifdef __cplusplus extern "C" { #define this this__ #endif
... ton bô code C tout plein de mots clés interdits ...
#ifdef __cplusplus #undef this } #endif
C'est crade, je sais.
C'est pas si mal...
Bof. Ca dépend de « ton bô code C tout plein de mots clés interdits », mais si c'est pour modifier l'interface que définit l'en-tête selon que l'on compile avec un compilateur C ou C++ ...
~> cat fclc.c void f() { struct A a ; a->this = & a ; }
~> cat fclc.cc void g() { struct A a ; a->this__ = & a ; }
Pas terrible.
--drkm
Emmanuel Delahaye <emdel@YOURBRAnoos.fr> writes:
Charlie Gordon wrote on 09/11/04 :
M'embête, lui... et mes beaux this alors ?
Tu ruses :
#ifdef __cplusplus
extern "C" {
#define this this__
#endif
... ton bô code C tout plein de mots clés interdits ...
#ifdef __cplusplus
#undef this
}
#endif
C'est crade, je sais.
C'est pas si mal...
Bof. Ca dépend de « ton bô code C tout plein de mots clés
interdits », mais si c'est pour modifier l'interface que définit
l'en-tête selon que l'on compile avec un compilateur C ou C++ ...
#ifdef __cplusplus extern "C" { #define this this__ #endif
... ton bô code C tout plein de mots clés interdits ...
#ifdef __cplusplus #undef this } #endif
C'est crade, je sais.
C'est pas si mal...
Bof. Ca dépend de « ton bô code C tout plein de mots clés interdits », mais si c'est pour modifier l'interface que définit l'en-tête selon que l'on compile avec un compilateur C ou C++ ...
~> cat fclc.c void f() { struct A a ; a->this = & a ; }
~> cat fclc.cc void g() { struct A a ; a->this__ = & a ; }
Pas terrible.
--drkm
Charlie Gordon
Pas terrible.
je suis d'accord. La bonne solution est d'éviter les mots clés du C++ dans du code C. A fortiori dans des headers dont personne ne peut jurer qu'ils ne seront jamais partagés avec du C++.
QED
Chqrlie.
Pas terrible.
je suis d'accord. La bonne solution est d'éviter les mots clés du C++ dans du
code C. A fortiori dans des headers dont personne ne peut jurer qu'ils ne
seront jamais partagés avec du C++.
je suis d'accord. La bonne solution est d'éviter les mots clés du C++ dans du code C. A fortiori dans des headers dont personne ne peut jurer qu'ils ne seront jamais partagés avec du C++.
QED
Chqrlie.
Emmanuel Delahaye
Charlie Gordon wrote on 10/11/04 :
Pas terrible.
je suis d'accord. La bonne solution est d'éviter les mots clés du C++ dans du code C. A fortiori dans des headers dont personne ne peut jurer qu'ils ne seront jamais partagés avec du C++.
Oui, ben ok, j'ai dejà dit que j'avais compris non ?
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Charlie Gordon wrote on 10/11/04 :
Pas terrible.
je suis d'accord. La bonne solution est d'éviter les mots clés du C++ dans
du code C. A fortiori dans des headers dont personne ne peut jurer qu'ils ne
seront jamais partagés avec du C++.
Oui, ben ok, j'ai dejà dit que j'avais compris non ?
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
je suis d'accord. La bonne solution est d'éviter les mots clés du C++ dans du code C. A fortiori dans des headers dont personne ne peut jurer qu'ils ne seront jamais partagés avec du C++.
Oui, ben ok, j'ai dejà dit que j'avais compris non ?
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
James Kanze
drkm writes:
|> Emmanuel Delahaye writes:
|> > il me semble que |> > ce qui est extern "C" n'est pas soumis aux lois du C++
|> Pas pour ce qui est de l'analyse syntaxique. C'est au niveau du |> code généré. C'est comme cela par exemple que ton linker s'y |> retrouve.
Même pas. Les noms et les types qui y sont définis le sont selon les règles de C, mais pour la reste -- il n'y a aucun problème à appeler une fonction virtuelle dans une function définie extern "C", par exemple.
-- James Kanze Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
|> > il me semble que
|> > ce qui est extern "C" n'est pas soumis aux lois du C++
|> Pas pour ce qui est de l'analyse syntaxique. C'est au niveau du
|> code généré. C'est comme cela par exemple que ton linker s'y
|> retrouve.
Même pas. Les noms et les types qui y sont définis le sont selon les
règles de C, mais pour la reste -- il n'y a aucun problème à appeler une
fonction virtuelle dans une function définie extern "C", par exemple.
--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
|> > il me semble que |> > ce qui est extern "C" n'est pas soumis aux lois du C++
|> Pas pour ce qui est de l'analyse syntaxique. C'est au niveau du |> code généré. C'est comme cela par exemple que ton linker s'y |> retrouve.
Même pas. Les noms et les types qui y sont définis le sont selon les règles de C, mais pour la reste -- il n'y a aucun problème à appeler une fonction virtuelle dans une function définie extern "C", par exemple.
-- James Kanze Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
drkm
James Kanze writes:
drkm writes:
|> Emmanuel Delahaye writes:
|> > il me semble que |> > ce qui est extern "C" n'est pas soumis aux lois du C++
|> Pas pour ce qui est de l'analyse syntaxique. C'est au niveau du |> code généré. C'est comme cela par exemple que ton linker s'y |> retrouve.
Même pas. Les noms et les types qui y sont définis le sont selon les règles de C, mais pour la reste -- il n'y a aucun problème à appeler une fonction virtuelle dans une function définie extern "C", par exemple.
|> > il me semble que
|> > ce qui est extern "C" n'est pas soumis aux lois du C++
|> Pas pour ce qui est de l'analyse syntaxique. C'est au niveau du
|> code généré. C'est comme cela par exemple que ton linker s'y
|> retrouve.
Même pas. Les noms et les types qui y sont définis le sont selon les
règles de C, mais pour la reste -- il n'y a aucun problème à appeler une
fonction virtuelle dans une function définie extern "C", par exemple.
|> > il me semble que |> > ce qui est extern "C" n'est pas soumis aux lois du C++
|> Pas pour ce qui est de l'analyse syntaxique. C'est au niveau du |> code généré. C'est comme cela par exemple que ton linker s'y |> retrouve.
Même pas. Les noms et les types qui y sont définis le sont selon les règles de C, mais pour la reste -- il n'y a aucun problème à appeler une fonction virtuelle dans une function définie extern "C", par exemple.
Bien sûr. J'ai du mal à saisir le rapport ...
--drkm
Gabriel Dos Reis
James Kanze writes:
| drkm writes: | | |> Emmanuel Delahaye writes: | | |> > il me semble que | |> > ce qui est extern "C" n'est pas soumis aux lois du C++ | | |> Pas pour ce qui est de l'analyse syntaxique. C'est au niveau du | |> code généré. C'est comme cela par exemple que ton linker s'y | |> retrouve. | | Même pas. Les noms et les types qui y sont définis le sont selon les | règles de C,
La norme C++ n'est pas d'accord avec toi, 7.5/4 :
[...] A C language linkage is ignored for the names of class members and the member function type of class member functions. [Example:
[...]
extern "C" { class X { void mf(); // the name of the function mf and the member // function's type have C++ language linkage void mf2(void(*)()); // the name of the function mf2 has C++ language // linkage; the parameter has type pointer to // C function }; }
--end example]
| mais pour la reste -- il n'y a aucun problème à appeler une | fonction virtuelle dans une function définie extern "C", par exemple.
D'accord.
-- Gaby
James Kanze <james.kanze@free.fr> writes:
| drkm <usenet.fclcxx@fgeorges.org> writes:
|
| |> Emmanuel Delahaye <emdel@YOURBRAnoos.fr> writes:
|
| |> > il me semble que
| |> > ce qui est extern "C" n'est pas soumis aux lois du C++
|
| |> Pas pour ce qui est de l'analyse syntaxique. C'est au niveau du
| |> code généré. C'est comme cela par exemple que ton linker s'y
| |> retrouve.
|
| Même pas. Les noms et les types qui y sont définis le sont selon les
| règles de C,
La norme C++ n'est pas d'accord avec toi, 7.5/4 :
[...] A C language linkage is ignored for the names of class members
and the member function type of class member functions. [Example:
[...]
extern "C" {
class X {
void mf(); // the name of the function mf and the member
// function's type have C++ language linkage
void mf2(void(*)()); // the name of the function mf2 has C++
language
// linkage; the parameter has type pointer to
// C function
};
}
--end example]
| mais pour la reste -- il n'y a aucun problème à appeler une
| fonction virtuelle dans une function définie extern "C", par exemple.
| drkm writes: | | |> Emmanuel Delahaye writes: | | |> > il me semble que | |> > ce qui est extern "C" n'est pas soumis aux lois du C++ | | |> Pas pour ce qui est de l'analyse syntaxique. C'est au niveau du | |> code généré. C'est comme cela par exemple que ton linker s'y | |> retrouve. | | Même pas. Les noms et les types qui y sont définis le sont selon les | règles de C,
La norme C++ n'est pas d'accord avec toi, 7.5/4 :
[...] A C language linkage is ignored for the names of class members and the member function type of class member functions. [Example:
[...]
extern "C" { class X { void mf(); // the name of the function mf and the member // function's type have C++ language linkage void mf2(void(*)()); // the name of the function mf2 has C++ language // linkage; the parameter has type pointer to // C function }; }
--end example]
| mais pour la reste -- il n'y a aucun problème à appeler une | fonction virtuelle dans une function définie extern "C", par exemple.