Skip to content
Extraits de code Groupes Projets
Valider 7430d513 rédigé par François Michel's avatar François Michel
Parcourir les fichiers

fix layout issues

parent ad6a651c
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -92,7 +92,7 @@ que vous aviez réalisé en Java.
``-Werror``
Make all warnings into errors.
#. Recompilez le code du point `1` avec l'option ``-Werror``, que se passe-t-il ? Que faut-t-il rajouter dans le code pour qu'il compile sans erreurs ?
#. Recompilez le code du point `4` avec l'option ``-Werror``, que se passe-t-il ? Que faut-t-il rajouter dans le code pour qu'il compile sans erreurs ?
.. only:: staff
......@@ -100,7 +100,7 @@ que vous aviez réalisé en Java.
Le programme ne compile plus. Il faut inclure ``stdio.h`` parce que C nécessite d'avoir une déclaration des fonctions.
#. (bonus) comment se fait-il que ``gcc`` compilait sans problème au point `1`?
#. (bonus) comment se fait-il que ``gcc`` compilait sans problème au point `4`?
.. only:: staff
......@@ -108,7 +108,7 @@ que vous aviez réalisé en Java.
``gcc`` crée une déclaration implicite des fonctions de la librairie C. Il n'affiche qu'un warning.
#. Lorsque j'exécute le programme corrigé du point `3` dans une console, j'ai accès à plusieurs variables. L'une d'elles est ``$?`` qui permet de récupérer la valeur de retour du dernier programme exécuté. Expliquez à quoi sert cette valeur.
#. Lorsque j'exécute le programme corrigé du point `6` dans une console, j'ai accès à plusieurs variables. L'une d'elles est ``$?`` qui permet de récupérer la valeur de retour du dernier programme exécuté. Expliquez à quoi sert cette valeur.
.. code-block:: console
......@@ -133,7 +133,7 @@ que vous aviez réalisé en Java.
``-Wall``
This enables all the warnings about constructions that some users consider questionable, and that are easy to avoid (or modify to prevent the warning), even in conjunction with macros.
#. Recompilez le code corrigé du point `3` avec les options ``-Wall`` et ``-Werror``, que se passe-t-il ? Que faut-il rajouter dans le code pour qu'il compile sans erreurs ?
#. Recompilez le code corrigé du point `6` avec les options ``-Wall`` et ``-Werror``, que se passe-t-il ? Que faut-il rajouter dans le code pour qu'il compile sans erreurs ?
.. only:: staff
......@@ -142,43 +142,43 @@ que vous aviez réalisé en Java.
``-Wall``: warning si une fonction ne renvoie pas de valeur. Il faut donc ajouter ``return 0;`` à la fin de la ``main``.
.. only:: staff
.. only:: staff
#. Compilez le code suivant (sans les options ``-Wall`` et ``-Werror``). Expliquez ce que sont les arguments de la fonction ``main``. Expliquez ce que fait `atoi(3)`_ (voir `strtol(3)`_ pour une fonction similaire). Exécutez ensuite le code avec ou sans arguments. Qu'observez-vous ? Comment se protéger du fait qu'un utilisateur ne va pas forcément rentrer le bon nombre d'arguments ?
#. Compilez le code suivant (sans les options ``-Wall`` et ``-Werror``). Expliquez ce que sont les arguments de la fonction ``main``. Expliquez ce que fait `atoi(3)`_ (voir `strtol(3)`_ pour une fonction similaire). Exécutez ensuite le code avec ou sans arguments. Qu'observez-vous ? Comment se protéger du fait qu'un utilisateur ne va pas forcément rentrer le bon nombre d'arguments ?
.. code-block:: c
.. code-block:: c
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int a = atoi(argv[1]);
printf("%d\n", a);
}
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int a = atoi(argv[1]);
printf("%d\n", a);
}
.. note::
.. note::
``argc`` = nombre d'arguments.
``argv`` = tableau de chaine de caractère contenant le nom de l'exécutable suivi des arguments.
``atoi`` = transforme une chaine de caractère en un entier.
Le programme renvoi une segmentation fault lorsque l'on ne passe pas d'argument. Il faut donc utiliser ``argc`` pour tester que l'on a le bon nombre d'argument.
``argc`` = nombre d'arguments.
``argv`` = tableau de chaine de caractère contenant le nom de l'exécutable suivi des arguments.
``atoi`` = transforme une chaine de caractère en un entier.
Le programme renvoi une segmentation fault lorsque l'on ne passe pas d'argument. Il faut donc utiliser ``argc`` pour tester que l'on a le bon nombre d'argument.
.. only:: staff
.. only:: staff
#. Ecrivez un programme qui va itérer (avec une boucle ``for`` et une boucle ``while``) et afficher tous les arguments qui lui sont passés à la sortie standard.
#. Ecrivez un programme qui va itérer (avec une boucle ``for`` et une boucle ``while``) et afficher tous les arguments qui lui sont passés à la sortie standard.
.. note::
.. note::
.. code-block:: c
.. code-block:: c
#include <stdio.h>
int main(int argc, const char *argv[])
{
int i;
for (i = 1; i < argc; i++)
printf("%s\n", argv[i]);
return 0;
}
#include <stdio.h>
int main(int argc, const char *argv[])
{
int i;
for (i = 1; i < argc; i++)
printf("%s\n", argv[i]);
return 0;
}
#. Ecrivez deux programmes qui réagissent de façon similaire à `true(1)`_ et `false(1)`_ en utilisant `exit(3)`_. Vous pouvez tester le bon fonctionnement de votre programme en exécutant le code suivant dans une console:
......@@ -289,4 +289,4 @@ systématique de ce genre d'outils vous évitera bon nombre d'erreurs fréquente
#. ! -z au lieu de -n
#. < au lieu de -lt . Cette erreur n'est pas détectée par ShellCheck.
\ No newline at end of file
#. < au lieu de -lt . Cette erreur n'est pas détectée par ShellCheck.
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter