Tiens, ça me fait poser une question ça (que je trouverai peut-être bête en revenant de manger :p) : comment définir une constante dans un en-tête standard, à part les enum ? En effet, si on met "const double", il faudra faire gaffe à l'ODR... et définir la variable dans un .cpp. Enfin, vous avez compris quoi...
Bin, pas vraiment. Qu'est-ce qui te gêne dans la solution :
// <cmath> extern double const PI;
// Ailleur, à discrétion du compilo : double const PI = 3.14;
Ce qui me gêne, c'est le 'à discrétion du compilo'. Qu'entends-tu par là ? Ce que je veux dire, c'est que comme un .h ne peut pas contenir la définition, et que pour une lib standard, on ne doit pas mettre la défintion dans *notre* code, il faudrait que le compilo fasse une exception pour chaque variable... lourd :( -- <=- Michaël "Cortex" Monerau -=>
Loïc Joly wrote:
Michaël Monerau wrote:
Tiens, ça me fait poser une question ça (que je trouverai peut-être
bête en revenant de manger :p) : comment définir une constante dans
un en-tête standard, à part les enum ? En effet, si on met "const
double", il faudra faire gaffe à l'ODR... et définir la variable
dans un .cpp. Enfin, vous avez compris quoi...
Bin, pas vraiment. Qu'est-ce qui te gêne dans la solution :
// <cmath>
extern double const PI;
// Ailleur, à discrétion du compilo :
double const PI = 3.14;
Ce qui me gêne, c'est le 'à discrétion du compilo'. Qu'entends-tu par là ?
Ce que je veux dire, c'est que comme un .h ne peut pas contenir la
définition, et que pour une lib standard, on ne doit pas mettre la défintion
dans *notre* code, il faudrait que le compilo fasse une exception pour
chaque variable... lourd :(
--
<=- Michaël "Cortex" Monerau -=>
Tiens, ça me fait poser une question ça (que je trouverai peut-être bête en revenant de manger :p) : comment définir une constante dans un en-tête standard, à part les enum ? En effet, si on met "const double", il faudra faire gaffe à l'ODR... et définir la variable dans un .cpp. Enfin, vous avez compris quoi...
Bin, pas vraiment. Qu'est-ce qui te gêne dans la solution :
// <cmath> extern double const PI;
// Ailleur, à discrétion du compilo : double const PI = 3.14;
Ce qui me gêne, c'est le 'à discrétion du compilo'. Qu'entends-tu par là ? Ce que je veux dire, c'est que comme un .h ne peut pas contenir la définition, et que pour une lib standard, on ne doit pas mettre la défintion dans *notre* code, il faudrait que le compilo fasse une exception pour chaque variable... lourd :( -- <=- Michaël "Cortex" Monerau -=>
Loïc Joly
Michaël Monerau wrote:
Bin, pas vraiment. Qu'est-ce qui te gêne dans la solution :
// <cmath> extern double const PI;
// Ailleur, à discrétion du compilo : double const PI = 3.14;
Ce qui me gêne, c'est le 'à discrétion du compilo'. Qu'entends-tu par là ? Ce que je veux dire, c'est que comme un .h ne peut pas contenir la définition, et que pour une lib standard, on ne doit pas mettre la défintion dans *notre* code, il faudrait que le compilo fasse une exception pour chaque variable... lourd :(
Quand tu compiles du code, le compilateur va lier le résultat avec une bibliothèque contenant une partie de la bibliothèque standard, qui n'est pas toute dans les headers. Par exemple, sous visual C++ 6.0, cette bibliothèque peut s'appeler selon les options de compilation (debug, belease, multithread ou non, MFC ou non...) libcmt, libcmtd, msvcrt, msvcrtd, libcmt, libcmtd.
-- Loïc
Michaël Monerau wrote:
Bin, pas vraiment. Qu'est-ce qui te gêne dans la solution :
// <cmath>
extern double const PI;
// Ailleur, à discrétion du compilo :
double const PI = 3.14;
Ce qui me gêne, c'est le 'à discrétion du compilo'. Qu'entends-tu par là ?
Ce que je veux dire, c'est que comme un .h ne peut pas contenir la
définition, et que pour une lib standard, on ne doit pas mettre la défintion
dans *notre* code, il faudrait que le compilo fasse une exception pour
chaque variable... lourd :(
Quand tu compiles du code, le compilateur va lier le résultat avec une
bibliothèque contenant une partie de la bibliothèque standard, qui n'est
pas toute dans les headers. Par exemple, sous visual C++ 6.0, cette
bibliothèque peut s'appeler selon les options de compilation (debug,
belease, multithread ou non, MFC ou non...) libcmt, libcmtd, msvcrt,
msvcrtd, libcmt, libcmtd.
Bin, pas vraiment. Qu'est-ce qui te gêne dans la solution :
// <cmath> extern double const PI;
// Ailleur, à discrétion du compilo : double const PI = 3.14;
Ce qui me gêne, c'est le 'à discrétion du compilo'. Qu'entends-tu par là ? Ce que je veux dire, c'est que comme un .h ne peut pas contenir la définition, et que pour une lib standard, on ne doit pas mettre la défintion dans *notre* code, il faudrait que le compilo fasse une exception pour chaque variable... lourd :(
Quand tu compiles du code, le compilateur va lier le résultat avec une bibliothèque contenant une partie de la bibliothèque standard, qui n'est pas toute dans les headers. Par exemple, sous visual C++ 6.0, cette bibliothèque peut s'appeler selon les options de compilation (debug, belease, multithread ou non, MFC ou non...) libcmt, libcmtd, msvcrt, msvcrtd, libcmt, libcmtd.
-- Loïc
Alain Naigeon
"Nico" a écrit dans le message news: bnj58n$1g7$
les fonctions "cos" et "sin" veulent des radians, je n'ai que des degrés à leur proposer.
comment puis-je m'en sortir ???
2Pi radians = 360 degrés ; le reste est trop difficile pour une classe de CM2.
--
Français *==> "Musique renaissance" <==* English midi - facsimiles - ligatures - mensuration http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/ Alain Naigeon - - Strasbourg, France
"Nico" <lepro.nico@caramail.com> a écrit dans le message news:
bnj58n$1g7$1@news-reader1.wanadoo.fr...
les fonctions "cos" et "sin" veulent des radians, je n'ai que des degrés à
leur proposer.
comment puis-je m'en sortir ???
2Pi radians = 360 degrés ;
le reste est trop difficile pour une classe de CM2.
--
Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - anaigeon@free.fr - Strasbourg, France
Ne voulais-tu pas dire : // <cmath> namespace { double const PI = 3.14; }
Non non : 3.5/3 << A name having namespace scope (3.3.5) has internal linkage if it is the name of — an object, reference, function or function template that is explicitly declared static or, — an object or reference that is explicitly declared const and neither explicitly declared extern nor previously declared to have external linkage; or — a data member of an anonymous union.
namespace std { double const PI = 3.14; } ne pose donc pas de problème.
Bertrand.
Loïc Joly <loic.actarus.joly@wanadoo.fr> wrote in message news:<bnka46$doj$1@news-reader5.wanadoo.fr>...
Ne voulais-tu pas dire :
// <cmath>
namespace
{
double const PI = 3.14;
}
Non non : 3.5/3
<<
A name having namespace scope (3.3.5) has internal linkage if it is
the name of
— an object, reference, function or function template that is
explicitly declared static or,
— an object or reference that is explicitly declared const and
neither explicitly declared extern nor
previously declared to have external linkage; or
— a data member of an anonymous union.
namespace std { double const PI = 3.14; }
ne pose donc pas de problème.
Ne voulais-tu pas dire : // <cmath> namespace { double const PI = 3.14; }
Non non : 3.5/3 << A name having namespace scope (3.3.5) has internal linkage if it is the name of — an object, reference, function or function template that is explicitly declared static or, — an object or reference that is explicitly declared const and neither explicitly declared extern nor previously declared to have external linkage; or — a data member of an anonymous union.
namespace std { double const PI = 3.14; } ne pose donc pas de problème.
Bertrand.
kanze
"Michaël Monerau" wrote in message news:<YR9nb.27836$...
Philippe Guglielmetti wrote:
On peut aussi utiliser la constante définie dans l'include ad hoc.
qui est ???
M_PI
cherche un "#define M_PI xxx" dans math.h.
Seulement si ta définition de C a été révisée par Posix -- la norme C (et la norme C++, par référence à la norme C) l'interdit, et la norme Posix l'exige.
-- James Kanze GABI Software mailto: 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
"Michaël Monerau" <cort@meloo.com> wrote in message
news:<YR9nb.27836$OG.14280@news.chello.at>...
Philippe Guglielmetti wrote:
On peut aussi utiliser la constante définie dans l'include ad hoc.
qui est ???
M_PI
cherche un "#define M_PI xxx" dans math.h.
Seulement si ta définition de C a été révisée par Posix -- la norme C
(et la norme C++, par référence à la norme C) l'interdit, et la norme
Posix l'exige.
--
James Kanze GABI Software mailto:kanze@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
"Michaël Monerau" wrote in message news:<YR9nb.27836$...
Philippe Guglielmetti wrote:
On peut aussi utiliser la constante définie dans l'include ad hoc.
qui est ???
M_PI
cherche un "#define M_PI xxx" dans math.h.
Seulement si ta définition de C a été révisée par Posix -- la norme C (et la norme C++, par référence à la norme C) l'interdit, et la norme Posix l'exige.
-- James Kanze GABI Software mailto: 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
kanze
"Michaël Monerau" wrote in message news:<KFdnb.34304$...
Philippe Guglielmetti wrote:
"Michaël Monerau" a écrit
cherche un "#define M_PI xxx" dans math.h.
ya pas dans le mien (VC6), et de toutes manières les #define pour des constantes mathématiques c'est de horreurs qu'aucun codeur digne de ce nom n'oserait utiliser, encore moins proposer pour un standard...
Je suis d'accord avec toi. Mais comme je pensais que c'était le standard... Et dans ce cas-là seulement (c'est peut-être un des seuls) ça ne me dérange pas que ce soit un define. Après tout, c'est pas plus mal que le compilo sache que c'est une litérale constante...
Enfin, je t'accorde qu'un const double passerait aussi, voire mieux, mais il y a des précautions à prendre avec les extern, etc... A part le faire en enum, pas de solution possible (je n'en vois pas en tout cas, est-ce que static résoudrait le problème ?). Donc, c'est pas plus mal un #define.
La seule justification pour le #define, c'est qu'il s'agit d'un en-tête partagé entre C++ et C. Et encore, dans le cas d'un double, je ne vois pas le problème avec :
static double const M_PI = 3. ; // La norme ne garantit pas la précision.
Tiens, ça me fait poser une question ça (que je trouverai peut-être bête en revenant de manger :p) : comment définir une constante dans un en-tête standard, à part les enum ?
En C++, quelque chose du genre :
static size_t const reponse = 42 ;
fait très bien l'affaire. En C, malheureusement, ce n'est pas une constante intégrale.
En effet, si on met "const double", il faudra faire gaffe à l'ODR...
Pas vraiment. En C++, une variable déclarée const est static par défaut. Il y a donc une instance par unité de compilation, et ça ne gène en rien si dans un fichier, tu as : static double const pi = 3. ; et dans un autre : static double const pi = 4. ;
(Enfin, en ce qui concerne le compilateur. Si tu utilises une valeur différente pour pi d'un fichier à l'autre, je me pose des questions sur la précision de tes résultats.)
-- James Kanze GABI Software mailto: 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
"Michaël Monerau" <cort@meloo.com> wrote in message
news:<KFdnb.34304$vL1.387120@news.chello.at>...
Philippe Guglielmetti wrote:
"Michaël Monerau" a écrit
cherche un "#define M_PI xxx" dans math.h.
ya pas dans le mien (VC6), et de toutes manières les #define pour
des constantes mathématiques c'est de horreurs qu'aucun codeur digne
de ce nom n'oserait utiliser, encore moins proposer pour un
standard...
Je suis d'accord avec toi. Mais comme je pensais que c'était le
standard... Et dans ce cas-là seulement (c'est peut-être un des
seuls) ça ne me dérange pas que ce soit un define. Après tout, c'est
pas plus mal que le compilo sache que c'est une litérale constante...
Enfin, je t'accorde qu'un const double passerait aussi, voire mieux,
mais il y a des précautions à prendre avec les extern, etc... A part
le faire en enum, pas de solution possible (je n'en vois pas en tout
cas, est-ce que static résoudrait le problème ?). Donc, c'est pas plus
mal un #define.
La seule justification pour le #define, c'est qu'il s'agit d'un en-tête
partagé entre C++ et C. Et encore, dans le cas d'un double, je ne vois
pas le problème avec :
static double const M_PI = 3. ; // La norme ne garantit pas la précision.
Tiens, ça me fait poser une question ça (que je trouverai peut-être
bête en revenant de manger :p) : comment définir une constante dans un
en-tête standard, à part les enum ?
En C++, quelque chose du genre :
static size_t const reponse = 42 ;
fait très bien l'affaire. En C, malheureusement, ce n'est pas une
constante intégrale.
En effet, si on met "const double", il faudra faire gaffe à
l'ODR...
Pas vraiment. En C++, une variable déclarée const est static par
défaut. Il y a donc une instance par unité de compilation, et ça ne gène
en rien si dans un fichier, tu as :
static double const pi = 3. ;
et dans un autre :
static double const pi = 4. ;
(Enfin, en ce qui concerne le compilateur. Si tu utilises une valeur
différente pour pi d'un fichier à l'autre, je me pose des questions sur
la précision de tes résultats.)
--
James Kanze GABI Software mailto:kanze@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
"Michaël Monerau" wrote in message news:<KFdnb.34304$...
Philippe Guglielmetti wrote:
"Michaël Monerau" a écrit
cherche un "#define M_PI xxx" dans math.h.
ya pas dans le mien (VC6), et de toutes manières les #define pour des constantes mathématiques c'est de horreurs qu'aucun codeur digne de ce nom n'oserait utiliser, encore moins proposer pour un standard...
Je suis d'accord avec toi. Mais comme je pensais que c'était le standard... Et dans ce cas-là seulement (c'est peut-être un des seuls) ça ne me dérange pas que ce soit un define. Après tout, c'est pas plus mal que le compilo sache que c'est une litérale constante...
Enfin, je t'accorde qu'un const double passerait aussi, voire mieux, mais il y a des précautions à prendre avec les extern, etc... A part le faire en enum, pas de solution possible (je n'en vois pas en tout cas, est-ce que static résoudrait le problème ?). Donc, c'est pas plus mal un #define.
La seule justification pour le #define, c'est qu'il s'agit d'un en-tête partagé entre C++ et C. Et encore, dans le cas d'un double, je ne vois pas le problème avec :
static double const M_PI = 3. ; // La norme ne garantit pas la précision.
Tiens, ça me fait poser une question ça (que je trouverai peut-être bête en revenant de manger :p) : comment définir une constante dans un en-tête standard, à part les enum ?
En C++, quelque chose du genre :
static size_t const reponse = 42 ;
fait très bien l'affaire. En C, malheureusement, ce n'est pas une constante intégrale.
En effet, si on met "const double", il faudra faire gaffe à l'ODR...
Pas vraiment. En C++, une variable déclarée const est static par défaut. Il y a donc une instance par unité de compilation, et ça ne gène en rien si dans un fichier, tu as : static double const pi = 3. ; et dans un autre : static double const pi = 4. ;
(Enfin, en ce qui concerne le compilateur. Si tu utilises une valeur différente pour pi d'un fichier à l'autre, je me pose des questions sur la précision de tes résultats.)
-- James Kanze GABI Software mailto: 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
Richard Delorme
"Michaël Monerau" wrote in message news:<KFdnb.34304$...
Philippe Guglielmetti wrote:
"Michaël Monerau" a écrit
cherche un "#define M_PI xxx" dans math.h.
ya pas dans le mien (VC6), et de toutes manières les #define pour des constantes mathématiques c'est de horreurs qu'aucun codeur digne de ce nom n'oserait utiliser, encore moins proposer pour un standard...
Ah, désolé, je pensais que M_PI était standard...
C'est standard -- la norme Posix:-).
Presque, M_PI (et les autres M_*) sont des extensions XSI (X/Open System Interfaces). M_PI peut ne pas être présent dans un système uniquement conforme à la norme POSIX (c-à-d IEEE Std 1003.1-2001).
-- Richard - qui confond lui aussi régulièrement POSIX et X/Open.
"Michaël Monerau" <cort@meloo.com> wrote in message
news:<KFdnb.34304$vL1.387120@news.chello.at>...
Philippe Guglielmetti wrote:
"Michaël Monerau" a écrit
cherche un "#define M_PI xxx" dans math.h.
ya pas dans le mien (VC6), et de toutes manières les #define pour
des constantes mathématiques c'est de horreurs qu'aucun codeur digne
de ce nom n'oserait utiliser, encore moins proposer pour un
standard...
Ah, désolé, je pensais que M_PI était standard...
C'est standard -- la norme Posix:-).
Presque, M_PI (et les autres M_*) sont des extensions XSI (X/Open System
Interfaces). M_PI peut ne pas être présent dans un système uniquement
conforme à la norme POSIX (c-à-d IEEE Std 1003.1-2001).
--
Richard - qui confond lui aussi régulièrement POSIX et X/Open.
"Michaël Monerau" wrote in message news:<KFdnb.34304$...
Philippe Guglielmetti wrote:
"Michaël Monerau" a écrit
cherche un "#define M_PI xxx" dans math.h.
ya pas dans le mien (VC6), et de toutes manières les #define pour des constantes mathématiques c'est de horreurs qu'aucun codeur digne de ce nom n'oserait utiliser, encore moins proposer pour un standard...
Ah, désolé, je pensais que M_PI était standard...
C'est standard -- la norme Posix:-).
Presque, M_PI (et les autres M_*) sont des extensions XSI (X/Open System Interfaces). M_PI peut ne pas être présent dans un système uniquement conforme à la norme POSIX (c-à-d IEEE Std 1003.1-2001).
-- Richard - qui confond lui aussi régulièrement POSIX et X/Open.
kanze
Richard Delorme wrote in message news:<3f9e6db8$0$6976$...
"Michaël Monerau" wrote in message news:<KFdnb.34304$...
Philippe Guglielmetti wrote:
"Michaël Monerau" a écrit
cherche un "#define M_PI xxx" dans math.h.
ya pas dans le mien (VC6), et de toutes manières les #define pour des constantes mathématiques c'est de horreurs qu'aucun codeur digne de ce nom n'oserait utiliser, encore moins proposer pour un standard...
Ah, désolé, je pensais que M_PI était standard...
C'est standard -- la norme Posix:-).
Presque, M_PI (et les autres M_*) sont des extensions XSI (X/Open System Interfaces). M_PI peut ne pas être présent dans un système uniquement conforme à la norme POSIX (c-à-d IEEE Std 1003.1-2001).
En effet. Je n'avais pas vu le marquage quand je l'ai régardé. http://www.unix-systems.org/single_unix_specification/, pour ceux à qui ça intéresse -- les normes Posix et XSI sont embriquées dans le même document, ce qui peut prêter à confusion parfois.
-- James Kanze GABI Software mailto: 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
Richard Delorme <abulmo@nospam.fr> wrote in message
news:<3f9e6db8$0$6976$7a628cd7@news.club-internet.fr>...
"Michaël Monerau" <cort@meloo.com> wrote in message
news:<KFdnb.34304$vL1.387120@news.chello.at>...
Philippe Guglielmetti wrote:
"Michaël Monerau" a écrit
cherche un "#define M_PI xxx" dans math.h.
ya pas dans le mien (VC6), et de toutes manières les #define pour
des constantes mathématiques c'est de horreurs qu'aucun codeur
digne de ce nom n'oserait utiliser, encore moins proposer pour un
standard...
Ah, désolé, je pensais que M_PI était standard...
C'est standard -- la norme Posix:-).
Presque, M_PI (et les autres M_*) sont des extensions XSI (X/Open
System Interfaces). M_PI peut ne pas être présent dans un système
uniquement conforme à la norme POSIX (c-à-d IEEE Std 1003.1-2001).
En effet. Je n'avais pas vu le marquage quand je l'ai régardé.
http://www.unix-systems.org/single_unix_specification/, pour ceux à qui
ça intéresse -- les normes Posix et XSI sont embriquées dans le même
document, ce qui peut prêter à confusion parfois.
--
James Kanze GABI Software mailto:kanze@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
Richard Delorme wrote in message news:<3f9e6db8$0$6976$...
"Michaël Monerau" wrote in message news:<KFdnb.34304$...
Philippe Guglielmetti wrote:
"Michaël Monerau" a écrit
cherche un "#define M_PI xxx" dans math.h.
ya pas dans le mien (VC6), et de toutes manières les #define pour des constantes mathématiques c'est de horreurs qu'aucun codeur digne de ce nom n'oserait utiliser, encore moins proposer pour un standard...
Ah, désolé, je pensais que M_PI était standard...
C'est standard -- la norme Posix:-).
Presque, M_PI (et les autres M_*) sont des extensions XSI (X/Open System Interfaces). M_PI peut ne pas être présent dans un système uniquement conforme à la norme POSIX (c-à-d IEEE Std 1003.1-2001).
En effet. Je n'avais pas vu le marquage quand je l'ai régardé. http://www.unix-systems.org/single_unix_specification/, pour ceux à qui ça intéresse -- les normes Posix et XSI sont embriquées dans le même document, ce qui peut prêter à confusion parfois.
-- James Kanze GABI Software mailto: 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