Int a = 'txet';

Signaler
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
-
Salut,
Je viens de remarquer une chose étonante dans vs.net:
int a = 'txet';

ne génere pas d'erreur de compilation. Est-ce une spécificité de vs ou une norme du langage?
Merci.

18 réponses

Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Le char est casté en int. Vérifie : printf("%c", a);
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
equivalent de
a = 0x74786574; // "text"
to norme or not to norme ??? bof...

ciao...
BruNews, MVP VC++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
BruNews> Tu trouves vraiment qu'un 0x74786574 est plus lisible qu'un 'txet'?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Apparemment MinGW le prend aussi
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
C'est des apostrophes, donc c'est un char, pas un char* !

équivalent à int a = 't';
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Plus lisible peut-etre non, comme d'hab question d'habitude.

ciao...
BruNews, MVP VC++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Oui je sais, l'exemple de BruNews aussi c'est un int, seulement c'est juste au niveau de l'écriture, je savais pas qu'on pouvait mettre plusieurs caractères entre '
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
Nebula >

char a = 'thjhjhjk'; est equivalent a
char a = 't';

mais

int a = 't'; est plutot equivalent a
int a = '\0\0\0t';

ca serais pas plutot ca ?
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Non :

int main(void) {
int a = 'abc';
printf("%c\n", a);
printf("%i\n", a);
}

donne à l'exécution :

$ a
c
6382179

Bizarre, je croyais que seul le premier char était pris dans le cast... Bah.
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
ben non c'est ce que je disait, et quand tu fais %c printf ne prend que les 8 bits de poids faibles de ton entier
Messages postés
787
Date d'inscription
samedi 8 juin 2002
Statut
Membre
Dernière intervention
7 juin 2007
1
Mouarf... Mais c'est spécifié dans la norme, ce truc ?

(heureusement que GCC affiche des warnings même si on les lui demande pas, çà pourrait être prise de tête ce truc)
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
non, la ca m'etonnerais, ca depend plutot de comment le compilo transforme ces constantes litterales en entier
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
vc 6 ne génere pas d'erreurs non plus, par contre pas possible de mettre plus que 4 chars (int a = 'texte' provoque l'erreur de compil' : error C2015: too many characters in constant). dc effectivement 4 char (ou moins) entre ' ' peuvent etre convertis en int...
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
Interessant... je connaissais pas aussi.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
N'est-ce pas?
Messages postés
241
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
8 octobre 2007
1
cosmobob > Normal que tu puisses pas mettre plus de 4 char, après tu dépasses les 32 bits de l'entier.
Théoriquement, sur un _int64 tu dois pouvoir en mettre jusqu'à 8 sans erreur.

eRoZion
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
a mons avis 'e', 'eeee' ou 'eeeeeeee' restent des entiers

c'est le cas sous gcc
sizeof 'e' sizeof 'eeee' sizeof 'eeeeeeee'
Messages postés
700
Date d'inscription
mardi 30 décembre 2003
Statut
Membre
Dernière intervention
27 janvier 2009
4
eRoZion > ta théorie est fausse
lol :)