Bonjour et bienvenue à nouveau.
Dans cette conférence, je veux juste passer en revue quelques compilateurs et avertissements courants.
Nous avons parlé de certains des problèmes c courants.
Mais parfois, vous ne savez même pas que vous avez ces erreurs dans votre programme lorsque
le compilateur essaie de vous le dire.
Les erreurs et avertissements du compilateur ont tendance à être vraiment cryptiques pour les nouveaux programmeurs.
Ils peuvent vous dire qu'il vous manque un point-virgule, mais il indique une fin de déclaration inaccessible.
Et pour quelqu'un de nouveau, il se peut qu'il ne sache même pas ce que cela signifie.
Il faut donc beaucoup de pratique pour écrire beaucoup de code
et pour déchiffrer certains de ces avertissements du compilateur au fil du temps.
Mais j'aimerais vous informer avant cela.
Donc, certains des problèmes courants que vous avez vus dans la conférence
précédente, je vais en fait décrire certains des avertissements et erreurs du compilateur et ce qu'ils diront réellement.
Il est très, très important de vous dire de comprendre ce que le compilateur vous dit.
Si le compilateur vous dit que des erreurs, mais que vous ne comprenez pas cette
erreur, cela vous prendra beaucoup plus de temps pour corriger ce code.
Mais si vous voyez l'erreur et que vous savez exactement ce qu'elle dit, vous pouvez
alors y remédier en un rien de temps.
Je me souviens, je serais dans le laboratoire quand j'ai commencé
à programmer, et il me
manquerait un point-virgule, ce qui est très courant. Et le compilateur me dirait qu'il me manque un point-virgule,
mais je ne le
saurais pas, il dirait simplement une fin de déclaration inaccessible, et je serais comme,
qu'est-ce que cela signifie, qu'est-ce qu'une déclaration. Je serais très confus.
C'est pourquoi je voulais vous donner quelques conseils sur ce que le compilateur essaie réellement de vous dire.
Il est donc très difficile de comprendre de quoi se plaint le compilateur.
Décrypter ces messages est
parfois très déroutant.
Vous devez donc comprendre ces erreurs du compilateur afin de les corriger, assez basique.
Et le compilateur fait la moitié du travail pour vous.
Il vérifie la syntaxe, vous indique exactement ce qui ne va
pas, vous devriez donc l'utiliser à votre avantage.
Mais parfois, il est difficile de comprendre exactement ce qu'il dit, surtout si vous êtes nouveau et
que vous ne comprenez pas une partie de la terminologie.
Le compilateur prend des décisions sur la façon de traduire votre code que
le programmeur n'a pas écrit dans le code.
Ceci est pratique pour le programme et le compilateur, afin
qu'il puisse être écrit plus succinctement.
Et seuls les programmeurs experts profitent de cette fonctionnalité.
Donc, ce que je vous dis, c'est que lorsque vous compilez, vous devez
toujours utiliser l'option de mur de tableau de bord.
Cela va tout allumer.
Donc, parfois, une fonctionnalité plus avancée est que vous
supprimerez certaines choses,
que vous aurez la traduction un peu plus efficace.
Mais lorsque vous ajoutez
cela, vous faites que le programme soit compilé différemment.
Et par conséquent, vous pouvez avoir des avertissements dans votre code que vous ne connaissez pas.
Donc, la raison pour laquelle je vous dis cela est que vous voulez toujours compiler avec une certaine option, qui
est l'option de mur de tableau de bord.
Et vous en fait, par défaut, est activé dans les blocs de code.
Et cela vous informera de tous les cas où le compilateur
fait des choses que vous ne savez pas.
Il activera également tous les avertissements,
vous donnera beaucoup d'informations, c'est une option de compilation très utile.
Une fois cette option activée, vous pouvez essayer de
vous aider à mieux comprendre ce que le compilateur vous dit.
Le compilateur va donc vous montrer deux
types de problèmes. L'une est une erreur.
Cela empêchera en fait la création du programme.
Vous avez une erreur de syntaxe et le programme ne peut pas être compilé.
Aucun travail
exécutable recréé et. Habituellement, lorsque vous voyez des erreurs du compilateur, vous
voulez toujours vous concentrer sur cette première erreur.
C'est l'erreur la plus fiable,
car certaines des autres erreurs peuvent être le résultat de cette première erreur.
Alors concentrez-vous toujours sur cette première erreur. Corrigez d'abord les erreurs en haut,
puis compilez à nouveau et voyez si les autres erreurs disparaissent.
Mises en garde. Les avertissements sont des messages que
le compilateur affiche pour des situations spéciales et dans lesquels un type d'anomalie a été détecté.
Ce sont des erreurs non fatales. Ainsi, l'exécutable sera créé.
Mais c'est toujours quelque chose que vous devez réparer.
Un avertissement est là pour une raison. Soit vous faites quelque chose de
manière incorrecte, soit cela pourrait causer un problème à l'avenir.
Vous voulez donc toujours corriger tous vos avertissements.
Et en compilant avec l'option de mur de tableau de bord,
vous ne considérez pas le programme comme correct tant que tous les avertissements n'ont pas été éliminés.
La compilation n'échouera donc pas. C'est pourquoi je vous dis
d'utiliser cette option ainsi que de voir tout ce qui se passe par le compilateur.
Donc, certains des messages de compilateur les plus courants que vous rencontrerez, et
ceux-ci seront directement liés à certains des problèmes c les plus courants
que nous avons mentionnés précédemment.
Si une variable n'est pas déclarée, vous verrez cette variable de message non déclarée en premier
à l'aide de cette fonction.
C'est l'un des plus courants et généralement plus faciles à détecter.
Et puis il affichera également le symbole
avant ce message.
Cela signifie essentiellement que vous
essayez d'utiliser cette variable, mais que vous ne l'avez jamais déclarée.
Nous savons que lorsque vous déclarez une variable, vous spécifiez le type de données.
Vous ne pouvez pas simplement signer des données à des variables qui n'existent pas.
Une déclaration implicite d'avertissement de fonction, ceci est lié aux déclarations de fonction.
C'est lorsque vous essayez d'appeler une fonction, mais
si la fonction n'a aucune implémentation associée. Vous n'avez pas inclus l'en-tête ou vous
ne l'avez pas déclaré. Donc, il ne sait pas où il se trouve,
et il ne sait pas comment la fonction est déclarée, il ne connaît pas les arguments, il ne connaît pas la valeur de retour.
N'a aucune information sur la fonction elle-même?
Pour résoudre ce problème, déclarez toujours un prototype de fonction en haut.
Un autre avertissement qui dit que le contrôle d'avertissement atteint la fin de la fonction non
void, cela se produira lorsqu'une fonction a été définie comme renvoyant un résultat non void, mais qu'il
n'y a pas d'instruction de retour incluse dans la fonction.
Vous avez donc oublié de renvoyer les données.
Soit la fonction est définie de manière incorrecte lorsque vous devez supprimer le type
de données avant la déclaration de fonction, soit vous avez
oublié d'ajouter cette instruction de retour. L'un des autres doit
être modifié afin de corriger cet avertissement.
Mais vous voyez comment c'est un avertissement. Vous pouvez toujours compiler là-bas,
mais cela pourrait vraiment causer des problèmes de coupure dans votre programme.
Si vous vous attendez à ce qu'une fonction retourne quelque chose et que ce n'est pas le cas, vous
voulez corriger vos avertissements, variable inutilisée, un autre avertissement courant.
Ceci est affiché par le compilateur lorsqu'une variable est déclarée, mais il n'est jamais utilisé.
Vous ne devriez pas déclarer une variable si vous ne
l'utilisez pas, supprimez donc cette déclaration.
J'ai tendance à les avoir un peu lorsque je fais certaines de mes démos parce
que je laisse des variables que je n'utilise jamais.
Ou quand je montrais comment déclarer une variable et que je
la compilais pour vous montrer qu'elle était compilée, j'obtenais un avertissement disant qu'elle n'avait jamais été utilisée.
Alors ça va parce que je faisais une démonstration. Mais supprimez vos variables
si elles ne sont pas utilisées. Pas besoin de déclarer.
Référence indéfinie à. Cela se produit dans la phase de liaison.
Alors souvenez-vous du compilateur ou de la phase de compilation, il compilera.
Tout d'abord, il exécutera le préprocesseur, puis il générera les fichiers objets, puis il prendra ces
fichiers objets et les liera ensemble pour créer un programme complet.
Ainsi, pendant la phase de
liaison, il doit résoudre toutes les dépendances externes.
Ou spécifiquement toutes les fonctions que vous appelez, elles
doivent être implémentées quelque part.
Donc, s'il n'a pas ce fichier objet, cela va vous poser ce problème.
Vous essayez d'appeler une fonction, mais nous n'avons pas le code pour cela.
Vous devez donc soit vous assurer de créer un
lien vers ce fichier.
Habituellement, le lien se produira
pour vous, mais dans GCC, vous pouvez simplement utiliser l'option tiret l
pour ajouter le fichier de liaison. Donc, si vous utilisez une fonction dans le
fichier d'en-tête mathématique, mais que vous n'êtes pas lié au fichier d'objet mathématique, vous obtiendrez cette erreur.
Et cela se produit également si vous avez défini l'utilisateur et que vous
n'avez pas inclus de fichier source c.
Vous avez donc plusieurs fichiers source c.
L'un des fichiers source c implémente cette fonction.
Un autre fichier source c inclut l'en-tête et
l'appelle, mais vous
n'avez jamais compilé l'autre fichier source c qui a l'implémentation, vous verrez
cette erreur.
Assurez-vous donc d'apporter ce fichier source, assurez-vous d'apporter tous les fichiers source
de la bibliothèque standard si vous avez besoin de le faire explicitement généralement, vous n'êtes pas obligé de le faire.
Une autre erreur courante se produit lors de conflits de types pour.
C'est à ce moment-là que vous avez réellement défini ou déclaré un prototype de fonction et que lorsque vous êtes allé
l'implémenter, ce n'était pas la même chose que la façon dont vous l'avez déclaré.
Ainsi, par exemple, le prototype a un type de résultat et un nom de parenthèses pour les
paramètres, puis un point-virgule.
Et puis, lorsque vous définissez l'implémentation,
vous avez un en-tête de fonction réel différent.
Vous avez un type de retour différent ou vous avez un nombre de paramètres différent.
Et cela dit bien, hé, vous avez
cette déclaration d'une fonction. Et puis, quand vous allez l'implémenter ci-dessous, c'est complètement différent.
Il y a donc un décalage.
Et cela vous montrera en fait sur la ligne que le conflit apparaît
dans la définition précédente qui a causé la contradiction.
Donc, dans l'implémentation, c'est généralement là où il vous montre la ligne
car généralement vous déclarez vos fonctions en haut.
Erreurs d'exécution. Les erreurs d'exécution sont des problèmes dans votre
code qui se produisent lorsque vous exécutez le programme, pas lorsque vous le compilez.
Donc, ce sont
généralement des plantages ou des erreurs non fatales où
vous êtes hors limites ou quelque chose du genre.
C'est lorsque le programme est en cours d'exécution, vous avez une sorte d'erreur logique.
Ainsi, l'exécution des programmes c peut se terminer brusquement avec un plantage lorsqu'une erreur d'exécution
est détectée, ce qu'elle ne peut pas gérer. Il y a une corruption de mémoire,
comme je l'ai mentionné.
Les erreurs hors limites provoquent généralement le blocage des programmes.
Habituellement, ce que vous voyez est une erreur de segmentation.
Et la faute de segmentation ne vous dit vraiment rien.
Donc, généralement, ce que vous voulez faire pour diagnostiquer davantage ce problème est
de regarder la pile d'appels, comme je
l'ai mentionné avant que le programme ne se bloque ligne
par ligne pour voir quelle ligne provoque le crash.
Vous pouvez obtenir la pile d'appels s'il existe un fichier de base, que j'ai mentionné plus tôt.
Et puis à partir de la pile d'appels, vous pouvez voir quelle ligne plante.
Ou mieux encore, exécutez le débogueur, ligne par ligne, puis lorsque vous exécutez une ligne, le
débogueur, vous verrez le programme se bloquer et vous pourrez l'identifier de cette façon.
Ce ne sont donc là que quelques conseils supplémentaires sur
les erreurs, les avertissements et les messages du compilateur et sur la manière de les interpréter.
Il y a en fait
des liens en ligne. Ou si vous
faites Google, il vous indiquera chaque erreur et avertissement du compilateur qui
peuvent être produits et il donnera en fait une définition de
la raison pour laquelle cela a été produit
et quel était le problème essentiellement.
Car encore une fois, ces erreurs de compilation peuvent être très cryptiques.
Et même un seul mot disait
un contrôle inaccessible. Vous savez nécessairement à partir de cette
description, sauf si vous en avez fait l'expérience, cela signifie que vous ne renvoyez jamais quelque chose d'une fonction.
Mais si vous le faites, l'un des meilleurs moyens de trouver et de résoudre
les problèmes dans votre programme lorsque vous avez des erreurs de compilation et que vous ne comprenez
pas ce compilateur, recherchez-le sur Google. Et généralement, ce qui se passera, c'est que vous allez déborder de la pile.
Et cela vous dira que c'est votre erreur, c'est ainsi que vous
la résolvez. Je fais ça encore aujourd'hui.
Je programme en c depuis 15 ans, mais il y a encore des
moments où je rencontre des choses, et je suis comme ce que cela signifie exactement.
Et je vais chercher sur Google, je vais prendre le compilateur, le mettre entre guillemets et
il me dira exactement ce qui se passe.
Le débordement de pile est un très, très bon site Web.
Et cela peut vraiment gagner beaucoup de temps dans
le processus de débogage. N'essayez pas seulement de deviner quand vous voyez des compilateurs ou des avertissements.
Ce compilateur essaie de vous dire quelque chose et il identifiera exactement ce qui se passe.
Donc, si vous le comprenez, vous allez pouvoir résoudre votre problème beaucoup, beaucoup plus rapidement.
Et si ce n'est pas quelque chose que vous
connaissez, allez au débordement de la pile ou allez sur un site Web qui les décrit tous
et vous pouvez le déchiffrer de cette façon.
J'espère que cela a été utile. Merci.