Un tout petit probleme de chr(n);

Signaler
Messages postés
4
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
30 avril 2005
-
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
-
bonjour, je n'arrive pas a compller le tout petit programme suivant:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(){

char c;
cj=CHR(49);
putchar(c);
getchar();
}

le compilateur (dev c++) me dit : [Linker error] undefined reference to `CHR'

SVP aidez moi pour un problème si simple...
A voir également:

17 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
116
Je ne sais pas ce que tu voulais vraiment faire avec ton "chr", mais je pense que tu avais oublié le 'a' de "char" :



#include <stdio.h>

#include <stdlib.h>

#include <string.h>



int main(){



char c;

c = char(49);

putchar(c);

getchar();

return 0;

}

DarK Sidious

Administrateur et reponsable VB/API du site www.ProgOtoP.com
Messages postés
4
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
30 avril 2005

Pardon pardon, j'ai fait une faute de frappe mais ca marche tjs pas :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(){

char c;
c=CHR(49);
putchar(c);
getchar();
}

c'est le CHR qui me fait un coup de filou : il s'agit de la commande qui consiste à retourner le caractère correspondant au code ASCII (expl : CHR(48) retourne 0 si je fais pas d'erreur)
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
116
donc c'est bien cà :




#include <stdio.h>

#include <stdlib.h>

#include <string.h>



int main(){



char c;

c = char(49);

putchar(c);

getchar();

return 0;

}



char(49) te renvoie 1, c'est-à-dire le code ASCII correspondant à 49 !


DarK Sidious

Administrateur et reponsable VB/API du site www.ProgOtoP.com
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
c = char(49); // ça existe ce truc ???
c = 49; // là oui je connais

ciao...
BruNews, MVP VC++
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

c = char(49); : C'est une contruction par copie je crois, equivalent a un contructeur char(const char& c); mais en C++.

pour STR à mon avis elle ne fait pas partie de la lib standard du C. Il manque surement un include.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
char c = char(49);
y pas notion de constructeur ici, c'est juste du à la pollution mentale quand on a commencé par VB, le plus gros travail en pareil cas est d'arriver à se vider le cerveau.

ciao...
BruNews, MVP VC++
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
Bonjours,



il s'agit bien d'un appel du constructeur, mais pas de recopie.



en c:



char c = 49;



en c++,



appel du constructeur explicite:



char c = char(49);



ou static_cast:



char c = static_cast<char>(49);
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
et ça construit quoi sur un 8 bits ???

ciao...
BruNews, MVP VC++
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
en c++ tout les types sont des objets et la force du typage impose que toute conversion soit définie.



ca construit sur n bits 49, char étant un type scalaire, mais rien ne
dit dans la norme que sa taille soit 8 bits, ca dépend de
l'architecture mais sizeof(char) vaut toujours 1
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
et sincerement, ça ne te semble pas aussi utile que de la philo ?
si sizeof(char) vaut toujours 1 octet, a moins de changer tout le binaire, ça fera toujours 8 bits.

ciao...
BruNews, MVP VC++
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
justement, sizeof ne retourne pas une taille en octet mais en char ! donc sizeof(char) toujours 1 par définition

la logique ce n'est pas de compter en octets mais avec la plus petite
entité adressable (ce que désigne char) pour rester portable
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
ben voila une petite discu sympa pour aujourd'hui, pour finir de mon cote, je peux constater que le compilo 'pense' comme moi quand je regarde le listing asm resultant, je ne crois pas que d'appeler octet 'char' changera l'affaire d'un iota.

ciao...
BruNews, MVP VC++
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

rien à voir avec VB. C'est juste une difference entre le C et le C++. Le C++ utilise des contructeurs même pour les types de base et ça a son utilité surtout avec les templates.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
bah je n'ai vu ni C++, ni constructeur et encore moins de template dans l'exemple du depart.

ciao...
BruNews, MVP VC++
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
bien sur que le compilateur génère le code assembleur adéquate en x86, c'est le but de la protabilité du source
Messages postés
224
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
18 octobre 2010

Sur ce coup la Bruce, t'es le plus fort.
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
4
Pour poursuivre, c'est la constante CHAR_BIT qui indique le nombre de bits d'un char.



En c:



#include <stdio.h>



int main()

{

printf( "Taille d'un int: %u bits\n", sizeof(int) * CHAR_BIT );

return 0;

}



En c++:



#include

#include <limits>





using namespace std;



int main()

{

cout << "Taille d'un int: "


<< sizeof(int) * numeric_limits::digits

<< " bits\n";

}