OVH Cloud OVH Cloud

Déclaration de chaînes constantes

43 réponses
Avatar
Olivier Boudeville
Bonjour à tous,

je suis en train de développer une bibliothèque C++, et je rencontre des
problèmes à l'exécution avec certains couples machines-compilateurs
(plantages de toute la batterie de tests unitaires sur différents objets
STL) qui me font douter de certains usages C++ concernant la définition
de chaînes constantes (même si pourtant cela a l'air simple, ou devrait
l'être !).

Dans un fichier CeylanUniformResourceIdentifier.h je déclare :

namespace Ceylan
{
namespace URI
{
[..]
extern const std::string ProtocolSeparator ;
[..]

et dans CeylanUniformResourceIdentifier.cc (un des fichiers qui inclut
CeylanUniformResourceIdentifier.h) je le définis ainsi :

const std::string Ceylan::URI::ProtocolSeparator = "://" ;

Est-ce que c'est une pratique correcte ?

J'ai un doute car ProtocolSeparator est un objet qui serait à construire
avant la première instruction de main (licite ? dangereux ?), et
valgrind me sort :

"""
==30157== Invalid write of size 4
==30157== at 0x40D3165: _GLOBAL__I__ZN6Ceylan3URI17ProtocolSeparatorE
(CeylanTypes.h:432)
==30157== by 0x40D3324: (within
/home/sye/tmp-Ceylan-test-install/lib/libCeylan-0.3.so.0.0.3)
==30157== by 0x40524C8: (within
/home/sye/tmp-Ceylan-test-install/lib/libCeylan-0.3.so.0.0.3)
==30157== by 0x400B70C: call_init (in /lib/ld-2.3.6.so)
==30157== by 0x400B7F1: _dl_init (in /lib/ld-2.3.6.so)
==30157== by 0x400081E: (within /lib/ld-2.3.6.so)
==30157== Address 0xBEFFCBD8 is not stack'd, malloc'd or (recently) free'd
"""

_GLOBAL__I__ZN6Ceylan3URI17ProtocolSeparatorE décrypté donne : "global
constructors keyed to Ceylan::URI::ProtocolSeparator". Mon doute est
accentué par le fait que la référence mentionnée (CeylanTypes.h:432) n'a
strictement aucun rapport avec ProtocolSeparator et pointe sur :
"""
typedef std::list<Ceylan::Uint16>::size_type ListSize ;
"""

(c'est un raccourci d'écriture [et peut-être aussi une mauvaise
pratique] pour fournir au développeur un type plus simple à manier).

Je sais qu'il serait possible d'encapsuler chacune de ces chaînes
constantes par une fonction spécifique qui la retourne (ex :

const std::string& ProtocolSeparator()
{
static const std::string instance = "://";
return instance;
}

) mais je me passerais bien d'une telle encapsulation si elle est
facultative.

Vous serait-il possible de m'indiquer si d'emblée, purement sur le plan
du langage C++, ces formes sont correctes ? (après je sens que je vais
être bon pour continuer sur les listes de gcc et de valgrind)

Merci d'avance !

Olivier.

3 réponses

1 2 3 4 5
Avatar
Michel Decima
Gabriel Dos Reis wrote:

[ Évidemment, mon manager a expliqué que je ne met pas mon cerveau en
marche à 8h et le débranche à 17h :-) ]


Il a explique qu'il se mettait en marche bien apres 8h, et se
debranchait bien avant 17h ? (desole, je n'ai pas pu me retenir)

Avatar
kanze
Gabriel Dos Reis wrote:
"kanze" writes:

| Gabriel Dos Reis wrote:
| > Sylvain writes:

| > [...]

| > > ceci étant, produire ça après 18h devant l'écran était une
| > > mauvaise idée.

| > C'est plus 35h en France ? ;-p

| Les ingenieurs, ce sont des cadres et assimilés. C-à-d qu'il ne
| pointe pas, que la direction decrète ce que représente 35 heures
| de travail, et que c'est ça, ses 35 heures, même s'il lui en
| faut 70.

| C'est un concepte assez universel : si jamais il t'arrive de
| travailler dans une boîte dans une ancienne industrie aux
| États-unis (genre automobile, etc.), en tant que cadre, tu
| serais « exempt », c-à-d pas couvert par les accords syndicaux
| sur le temps de travail, le payement des heures supplémentaires,
| etc.

Normalement, la durée légale c'est 40h ici, et je « gagne »
8h de vacances à la de chaque mois (et 8h « d'heure maladie »).


Ça serait généreux pour un employé non-exempt dans le privé.
Mais je croyais que tu faisais partie du corps enseignant.
D'après mes souvenirs (fort lointain, j'avoue), mes profs au
lycée avait bien toutes les vacances scolaires (moins quelques
jours), et n'était contrait qu'aux heures de cours, ce qui pour
un prof du lycée faisait déjà prèsque que 40 heures.) Mais
évidemment, on s'attendait de la correction des devoirs et la
préparation des cours, ce qui faisait qu'ils ne s'en tirait pas
avec moins de 60 heures de travail effectif par semaine, et que
même avec des vacances plus longues, ils faisaient probablement
plus d'heures par an qu'un ouvrier en usine. En plus, les lycées
du quartier offraient en général des cours de rattrappage
l'été ; la participation des profs était facultative, et payée
en plus, mais vue les salaires de base, un prof avec famille
n'avait pas vraiment le choix.

(J'utilise les mots « lycée » et « prof » un peu librement.
Un « high school » américain n'a pas grand chose à voir avec
un lycée français, sinon l'âge des élèves, et les enseignants du
sécondaire aux États-unis n'ont jamais le titre de professeur.)

Dans le privé (ou ce qu'on appelera le privé en France), la
situation dépend beaucoup de l'état et de l'industrie. Mais dans
les états et les industries où on a des règles (l'automobile en
Michigan, par exemple), on s'arrange bien pour que les
ingenieurs en informatique soient tous « exempt », c-à-d que
les règles (surtout le payement des heures supplémentaire) ne
s'appliquent pas à eux. Quant aux industries nouvelles, comme
l'informatique en Califorie... James Gosling avait une fois un
lien à une page du genre « You know your in Silicon Valley
if... », avec des entrées du genre : tu es content que c'est
samedi, parce que tu peux t'habiller en « casual » quand tu
vas au travail, ou ne travailler qu'une demi-journée signifie
que tu pars à 17 heures.

Il y a deux ans, je voulais prendre des vacances qui
éxcédaient de « 4 heures » mon temps accumulé. Quelqu'un dans
l'administration m'a expliqué que je pouvais le faire
uniquement si mon manager était d'accord qu'il me faisait
venir le samedi ou dimanche pour faire les heures manquantes.
Je suis resté sur le cul.


Je te signale que ce n'est pas toujours très différent dans le
privé en France (sauf qu'il y a plus de jours -- 2 par mois, je
crois). En général, on te laisserait « emprunter » des jours
de congé sur l'année en cours, mais ce n'est pas un droit.

[ Évidemment, mon manager a expliqué que je ne met pas mon cerveau en
marche à 8h et le débranche à 17h :-) ]


C'est un peu la justification formelle de l'« exempt ». Ton
cerveau n'a pas d'interrompteur, et qu'on ne peut donc pas
comptabiliser tes heures de travail. Ça peut marcher dans les
deux sens.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Avatar
Gabriel Dos Reis
"kanze" writes:

[...]

| > Normalement, la durée légale c'est 40h ici, et je « gagne »
| > 8h de vacances à la de chaque mois (et 8h « d'heure maladie »).
|
| Ça serait généreux pour un employé non-exempt dans le privé.
| Mais je croyais que tu faisais partie du corps enseignant.

oui, mais payé (jusqu'à présent) sur 12 mois ; donc les calculs sont
différents.

-- Gaby
1 2 3 4 5