Bonjour,

Envoyé par
o2pubcy9
#define sert à spécifier les macro/lettres i.e nom = valeurs
En effet, mais c'est même un peu plus subtil : il s'agit d'une directive à l'intention du préprocesseur. C'est-à-dire que tes macros seront développées puis substituées à la volée par leur résultat pour former un nouveau code source (temporaire) qui, LUI, sera traité par le compilateur. À ce stade, ce dernier n'aura plus aucune notion de tout ce qui commence par « # ». Il ne pourra pas savoir si la valeur qu'il traite est le fruit d'une macro ou si elle a directement été écrite comme ça par le programmeur.
typedef s'exprime de la manière suivante;
typedef déclaration de variable.
Oui, là aussi, ça demande précision : « typedef » (pour Type Definition) crée un alias sur un nom de type lorsqu'il est un peu trop long et/ou compliqué pour être utilisé directement. Et la syntaxe de typedef est exactement celle de la déclaration d'une variable (même grammaire). Ainsi, lorsque l'on écrit typedef int entier, c'est « entier » qui est l'alias et « int » le type initial. C'est le contraire de ce que l'on ferait avec une macro #define, en particulier. Cela prend même tout son sens lorsque c'est un pointeur de fonction ou de tableau que l'on déclare, car il faut alors le décorer des deux côtés. Par exemple : typedef int (mon_pointeur) (void);Par contre, ça ne veut pas dire que l'on déclare une variable à ce moment-là.
[LIST]j'ai importé la bibliothèque string avec
#include<string.h>
Pas tout-à-fait. Contrairement à d'autres langages qui utilisent des mots-clés similaires, #include n'importe pas de bibliothèque ou de module. #include sert simplement à insérer à l'endroit où il est appelé le contenu d'un fichier — quel qu'il soit — avant de reprendre le cours du code source principal.
On s'en sert alors majoritairement pour inclure un fichier qui ne contient que les prototypes et entêtes (headers, d'où *.h) d'une bibliothèque tierce. Comme ton compilateur sait alors comment les appeler, il n'a pas besoin de disposer de la bibliothèque proprement dite pour générer du code qui l'utilise. Il lui suffit de construire les bons appels. La liaison entre ton programme et la bibliothèque qu'il est censé utiliser se fait alors a poseriori, après la compilation, par l'éditeur de liens (linker).
j'ai défini
lassets+1 et
chaussures
J'ai mis un peu de temps à comprendre, mais en réalité, le mot « lacet » s'écrit avec un « c ». C'est important parce que « assets » (sans « l ») a une signification différente en anglais.
Or, je voudrais définir le type
string comme un tableau de
lassets+1 entiers sur 1 octet. sachant que j'ai auparavant défini
lassets+1 avec le
define.
Ce n'est peut-être pas une très bonne idée d'avoir choisi « string » comme nom de type car il est probable qu'il soit déjà réservé par la bibliothèque que tu utilises. Mais ça reste syntaxiquement correct.
Donc j'ai écrit :
typedef char string[lassets+1]
… mais je pense que ce n'est pas correct. Que devrais je écrire svp et pourquoi ?
La bonne nouvelle est que la syntaxe est correcte, surtout au regard de ce que l'on a exposé ci-dessus, et ce n'était pas facile.
La mauvaise est que tu ne peux pas spécifier une taille explicite dans un type, car un tableau n'est pas un objet instancié et managé (avec méta-données sous-jacentes et nettoyage automatique). En C, le type proprement dit est un char et les crochets qui le suivent sont une manière de l'indexer par rapport à son adresse de base.
Tu peux (et tu dois) tout-à-fait indiquer une taille à un tableau quand tu l'instancies en tant de variable mais cela ne vaut pas définition de type. Rien ne t'empêche, d'ailleurs de dépasser avec ton index la taille initiale indiquée, ce qui conduit à faire l'expérience des buffer overflows.
Il y a une seule exception (partielle) à ce principe : le cas où tu déclare un tableau dans une structure. Mais je ne développerai pas ce cas aujourd'hui.
Par ailleurs, je voudrais définir le type
tableau comme un tableau de chaussures de
string, sachant que
chaussures a été défini auparavant avec le
defineIci, je n'ai aucune idée. Pouvez vous m'aider svp ?
Si chaussures est un type valide (quelle que soit la manière dont il a été déclaré), alors il faut écrire :
typedef chaussures tableau[];
… mais il y a peu de chances que ce soit vraiment ce que tu comptes faire.
Partager