Jean-Marc Bourguet writes:
[...]
| If you feel you must define _NULL_, use
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| const int NULL = 0;
|
| The _const_ qualifier (5.4) prevents accidental redefinition of _NULL_
| and ensures that _NULL_ can be used where a constant is required.
|
|
| B.S. ne suggere pas que ceux qui utilisent NULL le definissent,
| mais que ceux qui le definissent le fassent comme indique. Perso
| j'aurais quand meme signale que ca pose un probleme des qu'on
| inclu un entete standard.
OK, mais quand il dit « if you feel you must », tu crois que c'est
sans danger ?
Jean-Marc Bourguet <jm@bourguet.org> writes:
[...]
| If you feel you must define _NULL_, use
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| const int NULL = 0;
|
| The _const_ qualifier (5.4) prevents accidental redefinition of _NULL_
| and ensures that _NULL_ can be used where a constant is required.
|
|
| B.S. ne suggere pas que ceux qui utilisent NULL le definissent,
| mais que ceux qui le definissent le fassent comme indique. Perso
| j'aurais quand meme signale que ca pose un probleme des qu'on
| inclu un entete standard.
OK, mais quand il dit « if you feel you must », tu crois que c'est
sans danger ?
Jean-Marc Bourguet writes:
[...]
| If you feel you must define _NULL_, use
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| const int NULL = 0;
|
| The _const_ qualifier (5.4) prevents accidental redefinition of _NULL_
| and ensures that _NULL_ can be used where a constant is required.
|
|
| B.S. ne suggere pas que ceux qui utilisent NULL le definissent,
| mais que ceux qui le definissent le fassent comme indique. Perso
| j'aurais quand meme signale que ca pose un probleme des qu'on
| inclu un entete standard.
OK, mais quand il dit « if you feel you must », tu crois que c'est
sans danger ?
Jean-Marc Bourguet writes:
[...]
| If you feel you must define _NULL_, use
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| const int NULL = 0;
|
| The _const_ qualifier (5.4) prevents accidental redefinition of _NULL_
| and ensures that _NULL_ can be used where a constant is required.
|
|
| B.S. ne suggere pas que ceux qui utilisent NULL le definissent, mais
| que ceux qui le definissent le fassent comme indique. Perso j'aurais
| quand meme signale que ca pose un probleme des qu'on inclu un entete
| standard.
OK, mais quand il dit « if you feel you must », tu crois que c'est
sans danger ?
Jean-Marc Bourguet <jm@bourguet.org> writes:
[...]
| If you feel you must define _NULL_, use
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| const int NULL = 0;
|
| The _const_ qualifier (5.4) prevents accidental redefinition of _NULL_
| and ensures that _NULL_ can be used where a constant is required.
|
|
| B.S. ne suggere pas que ceux qui utilisent NULL le definissent, mais
| que ceux qui le definissent le fassent comme indique. Perso j'aurais
| quand meme signale que ca pose un probleme des qu'on inclu un entete
| standard.
OK, mais quand il dit « if you feel you must », tu crois que c'est
sans danger ?
Jean-Marc Bourguet writes:
[...]
| If you feel you must define _NULL_, use
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| const int NULL = 0;
|
| The _const_ qualifier (5.4) prevents accidental redefinition of _NULL_
| and ensures that _NULL_ can be used where a constant is required.
|
|
| B.S. ne suggere pas que ceux qui utilisent NULL le definissent, mais
| que ceux qui le definissent le fassent comme indique. Perso j'aurais
| quand meme signale que ca pose un probleme des qu'on inclu un entete
| standard.
OK, mais quand il dit « if you feel you must », tu crois que c'est
sans danger ?
writes:
| Mais l'« intérêt principal » du const, ici ou ailleurs,
| c'est d'empècher qu'on y écrit. Si le but n'était que de
| s'assurer d'un linkage interne, il existe le mot clé static.
C'est là la règle idiote : celle qui consiste à surcharger «
static »
avec la signification que le linkage est interne.
« static » dès le début a toujours voulu dire « au plus une
seule instance dans le programme »,
et non un linkage interne.
C++ a maintenu cette signification et étendud cette notion
avec celle de « donnée membre statique », il y a deux
décennies.
Mais, certaines personnes ont perverti ce sens en le
surchargeant avec la notion de linkage.
Avec l'inroduction des namespaces, il a été tenté (avc un
succès modéré) de revenir à la signification originelle de «
static » en déclarant que l'utilisation de « static » pour
siginifier linkage interne dans certaines est dépréciée.
| Un bon programmeur, qui s'intéresse à la lisibilité de ses
| programmes, mettrait systèmatiquement le mot clé static
| aussi ;
Un bon programmeur connaît et utilise les constructions
idiomatiques. Et l'idiome, consacré depuis plus de deux
décennies, est qu'une variable const par défaut implique un
linkage interne, à porté globale (puis namespace plus tard).
Le programmeur « qui ne s'intéresse pas à la lisibilité de ses
programmes » et qui a inventé const en C++ il y a plus de deux
décennies a expliqué pourquoi il l'a inventé const et comment
il est arrivé à la règle en question dans D&E.
kanze@gabi-soft.fr writes:
| Mais l'« intérêt principal » du const, ici ou ailleurs,
| c'est d'empècher qu'on y écrit. Si le but n'était que de
| s'assurer d'un linkage interne, il existe le mot clé static.
C'est là la règle idiote : celle qui consiste à surcharger «
static »
avec la signification que le linkage est interne.
« static » dès le début a toujours voulu dire « au plus une
seule instance dans le programme »,
et non un linkage interne.
C++ a maintenu cette signification et étendud cette notion
avec celle de « donnée membre statique », il y a deux
décennies.
Mais, certaines personnes ont perverti ce sens en le
surchargeant avec la notion de linkage.
Avec l'inroduction des namespaces, il a été tenté (avc un
succès modéré) de revenir à la signification originelle de «
static » en déclarant que l'utilisation de « static » pour
siginifier linkage interne dans certaines est dépréciée.
| Un bon programmeur, qui s'intéresse à la lisibilité de ses
| programmes, mettrait systèmatiquement le mot clé static
| aussi ;
Un bon programmeur connaît et utilise les constructions
idiomatiques. Et l'idiome, consacré depuis plus de deux
décennies, est qu'une variable const par défaut implique un
linkage interne, à porté globale (puis namespace plus tard).
Le programmeur « qui ne s'intéresse pas à la lisibilité de ses
programmes » et qui a inventé const en C++ il y a plus de deux
décennies a expliqué pourquoi il l'a inventé const et comment
il est arrivé à la règle en question dans D&E.
writes:
| Mais l'« intérêt principal » du const, ici ou ailleurs,
| c'est d'empècher qu'on y écrit. Si le but n'était que de
| s'assurer d'un linkage interne, il existe le mot clé static.
C'est là la règle idiote : celle qui consiste à surcharger «
static »
avec la signification que le linkage est interne.
« static » dès le début a toujours voulu dire « au plus une
seule instance dans le programme »,
et non un linkage interne.
C++ a maintenu cette signification et étendud cette notion
avec celle de « donnée membre statique », il y a deux
décennies.
Mais, certaines personnes ont perverti ce sens en le
surchargeant avec la notion de linkage.
Avec l'inroduction des namespaces, il a été tenté (avc un
succès modéré) de revenir à la signification originelle de «
static » en déclarant que l'utilisation de « static » pour
siginifier linkage interne dans certaines est dépréciée.
| Un bon programmeur, qui s'intéresse à la lisibilité de ses
| programmes, mettrait systèmatiquement le mot clé static
| aussi ;
Un bon programmeur connaît et utilise les constructions
idiomatiques. Et l'idiome, consacré depuis plus de deux
décennies, est qu'une variable const par défaut implique un
linkage interne, à porté globale (puis namespace plus tard).
Le programmeur « qui ne s'intéresse pas à la lisibilité de ses
programmes » et qui a inventé const en C++ il y a plus de deux
décennies a expliqué pourquoi il l'a inventé const et comment
il est arrivé à la règle en question dans D&E.
TC++PL, 3rd Edition, 4th printing (j'ai pas vu d'errata pour ca).
Les
_xxx_ indiquent de l'italique dans le texte, il n'y a pas d'undescore
dans la partie citee.
5.1.1 Zero
Zero (0) is an _int_. Because of standard conversions
(C.6.2.3), 0 can be used as a constant of any integral
(4.1.1), floating-point, pointer or pointer-to-member type.
The type of zero will be determined by context. Zero will
typically (but not necessarily) be represented by the bit
pattern _all-zeros_ of the appropriate size.
No object is allocated with the address _0_. Consequently, 0
act as pointer literal, indicating that a pointer doesn't
refer to an object.
In C, it has been popular to define a macro _NULL_ to
represent the zero pointer. Because of C++'s tigher type
checking, the use of plain _0_, rather than any suggested
_NULL_ macro, leads to fewer problems. If you feel you must
define _NULL_, use
const int NULL = 0;
The _const_ qualifier (5.4) prevents accidental redefinition
of _NULL_ and ensures that _NULL_ can be used where a constant
is required.
B.S. ne suggere pas que ceux qui utilisent NULL le
definissent, mais que ceux qui le definissent le fassent comme
indique. Perso j'aurais quand meme signale que ca pose un
probleme des qu'on inclu un entete standard.
TC++PL, 3rd Edition, 4th printing (j'ai pas vu d'errata pour ca).
Les
_xxx_ indiquent de l'italique dans le texte, il n'y a pas d'undescore
dans la partie citee.
5.1.1 Zero
Zero (0) is an _int_. Because of standard conversions
(C.6.2.3), 0 can be used as a constant of any integral
(4.1.1), floating-point, pointer or pointer-to-member type.
The type of zero will be determined by context. Zero will
typically (but not necessarily) be represented by the bit
pattern _all-zeros_ of the appropriate size.
No object is allocated with the address _0_. Consequently, 0
act as pointer literal, indicating that a pointer doesn't
refer to an object.
In C, it has been popular to define a macro _NULL_ to
represent the zero pointer. Because of C++'s tigher type
checking, the use of plain _0_, rather than any suggested
_NULL_ macro, leads to fewer problems. If you feel you must
define _NULL_, use
const int NULL = 0;
The _const_ qualifier (5.4) prevents accidental redefinition
of _NULL_ and ensures that _NULL_ can be used where a constant
is required.
B.S. ne suggere pas que ceux qui utilisent NULL le
definissent, mais que ceux qui le definissent le fassent comme
indique. Perso j'aurais quand meme signale que ca pose un
probleme des qu'on inclu un entete standard.
TC++PL, 3rd Edition, 4th printing (j'ai pas vu d'errata pour ca).
Les
_xxx_ indiquent de l'italique dans le texte, il n'y a pas d'undescore
dans la partie citee.
5.1.1 Zero
Zero (0) is an _int_. Because of standard conversions
(C.6.2.3), 0 can be used as a constant of any integral
(4.1.1), floating-point, pointer or pointer-to-member type.
The type of zero will be determined by context. Zero will
typically (but not necessarily) be represented by the bit
pattern _all-zeros_ of the appropriate size.
No object is allocated with the address _0_. Consequently, 0
act as pointer literal, indicating that a pointer doesn't
refer to an object.
In C, it has been popular to define a macro _NULL_ to
represent the zero pointer. Because of C++'s tigher type
checking, the use of plain _0_, rather than any suggested
_NULL_ macro, leads to fewer problems. If you feel you must
define _NULL_, use
const int NULL = 0;
The _const_ qualifier (5.4) prevents accidental redefinition
of _NULL_ and ensures that _NULL_ can be used where a constant
is required.
B.S. ne suggere pas que ceux qui utilisent NULL le
definissent, mais que ceux qui le definissent le fassent comme
indique. Perso j'aurais quand meme signale que ca pose un
probleme des qu'on inclu un entete standard.
Gabriel Dos Reis wrote:Jean-Marc Bourguet writes:
[...]
| If you feel you must define _NULL_, use
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| const int NULL = 0;
| The _const_ qualifier (5.4) prevents accidental
| redefinition of _NULL_ and ensures that _NULL_ can be used
| where a constant is required.
| B.S. ne suggere pas que ceux qui utilisent NULL le
| definissent, mais que ceux qui le definissent le fassent
| comme indique. Perso j'aurais quand meme signale que ca
| pose un probleme des qu'on inclu un entete standard.
OK, mais quand il dit « if you feel you must », tu crois que
c'est sans danger ?
J'ai l'impression que le mot intéressant est celui juste après
la citation : "If you feel you must _define_".
Ce qui aurait pu être intéressant, pour le débat en cours,
c'est ce qu'il aurait marqué après un : "If you still want to
_use_ NULL, ....".
Gabriel Dos Reis wrote:
Jean-Marc Bourguet <jm@bourguet.org> writes:
[...]
| If you feel you must define _NULL_, use
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| const int NULL = 0;
| The _const_ qualifier (5.4) prevents accidental
| redefinition of _NULL_ and ensures that _NULL_ can be used
| where a constant is required.
| B.S. ne suggere pas que ceux qui utilisent NULL le
| definissent, mais que ceux qui le definissent le fassent
| comme indique. Perso j'aurais quand meme signale que ca
| pose un probleme des qu'on inclu un entete standard.
OK, mais quand il dit « if you feel you must », tu crois que
c'est sans danger ?
J'ai l'impression que le mot intéressant est celui juste après
la citation : "If you feel you must _define_".
Ce qui aurait pu être intéressant, pour le débat en cours,
c'est ce qu'il aurait marqué après un : "If you still want to
_use_ NULL, ....".
Gabriel Dos Reis wrote:Jean-Marc Bourguet writes:
[...]
| If you feel you must define _NULL_, use
^^^^^^^^^^^^^^^^^^^^^^^^^^^
| const int NULL = 0;
| The _const_ qualifier (5.4) prevents accidental
| redefinition of _NULL_ and ensures that _NULL_ can be used
| where a constant is required.
| B.S. ne suggere pas que ceux qui utilisent NULL le
| definissent, mais que ceux qui le definissent le fassent
| comme indique. Perso j'aurais quand meme signale que ca
| pose un probleme des qu'on inclu un entete standard.
OK, mais quand il dit « if you feel you must », tu crois que
c'est sans danger ?
J'ai l'impression que le mot intéressant est celui juste après
la citation : "If you feel you must _define_".
Ce qui aurait pu être intéressant, pour le débat en cours,
c'est ce qu'il aurait marqué après un : "If you still want to
_use_ NULL, ....".
C'est justement là le point crucial : si tu te retrouves
implémenteur de la bibliothèque standard, tu ne vas pas lire
TC++PL3 pour savoir la sémantique du langage :-). En d'autres
termes, TC++PL3 s'adresse au programmeur C++ (et non
l'implémenteur C++), et il y a virtuellement peu d'occasions
où « if you feel you must » se justifie.
C'est justement là le point crucial : si tu te retrouves
implémenteur de la bibliothèque standard, tu ne vas pas lire
TC++PL3 pour savoir la sémantique du langage :-). En d'autres
termes, TC++PL3 s'adresse au programmeur C++ (et non
l'implémenteur C++), et il y a virtuellement peu d'occasions
où « if you feel you must » se justifie.
C'est justement là le point crucial : si tu te retrouves
implémenteur de la bibliothèque standard, tu ne vas pas lire
TC++PL3 pour savoir la sémantique du langage :-). En d'autres
termes, TC++PL3 s'adresse au programmeur C++ (et non
l'implémenteur C++), et il y a virtuellement peu d'occasions
où « if you feel you must » se justifie.