Syntaxe et sémantique des fonctions en langage C
- réponses
Instructions pour le QCM :
Pour chacune des questions, plusieurs réponses peuvent être
correctes, vous pouvez donc cocher plusieurs cases !
-
Une fonction en langage C 89 est définie par :
| FAUX :
son nom et le type de valeur retournée.
(
Bien que l'édition de liens n'utilise que le nom pour trouver la
fonction, le type de retour ainsi que les types des arguments sont
nécessaires pour la cohérence entre les arguments passés et
l'utilisation de la valeur retournée.
) |
| FAUX :
son nom seul.
(
Bien que l'édition de liens n'utilise que le nom pour trouver la
fonction, le type de retour ainsi que les types des arguments sont
nécessaires pour la cohérence entre les arguments passés et
l'utilisation de la valeur retournée.
) |
| VRAI :
le type de retour, le nom, le nombre et les types d'arguments formels de la
fonction.
(
En langage C, les arguments font partie du prototype. Il n'existe cependant
pas de possibilité d'avoir deux fonctions qui portent le même nom et qui ont
des paramètres différents en nombre ou en type.
) |
-
Le langage C réalise-t-il le passage d'arguments par valeur ou par adresse ?
| FAUX :
Par valeur pour les constantes et par adresse pour les variables.
(
Il n'y a pas de différence de traitement entre les variables et les constantes.
) |
| VRAI :
Par adresse pour les pointeurs et les tableaux, par valeur pour les variables
et les constantes.
(
Il n'y a pas de différence de traitement entre les adresses et les autres types.
L'ensemble des paramètres est passé par copie de la valeur
du paramètre dans une variable.
Ainsi, une constante entière devient une variable entière et
une adresse d'entier (constante du type adresse d'entier) devient un pointeur
d'entier.
) |
| FAUX :
Par valeur quel que soit le type d'arguments à la fonction appelée.
(
Non les tableaux et les pointeurs sont passés par adresse.
) |
-
En langage C, le retour de fonction :
| VRAI :
Doit être d'un type cohérent avec le type du retour de la fonction
(
Oui sinon il faut réaliser un 'cast'.
) |
| VRAI :
Ne peut retourner qu'un résultat à la fois
(
Oui, même s'il y a plusieurs appels à 'return' dans le code de la fonction,
un seul d'entre eux est appelé et il ne tranportera qu'une seule valeur.
) |
| VRAI :
Peut retourner une structure
(
Oui, c'est la seule solution pour retourner plusieurs valeurs calculées
par une fonction.
) |
| FAUX :
Peut retourner le contenu d'un tableau .
(
Non, une fonction ne peut pas retourner le contenu d'un tableau, à
moins d'intégrer ce contenu dans une structure.
) |
-
Une fonction qui retourne un pointeur peut :
| FAUX :
Retourner un pointeur sur n'importe quelle variable locale.
(
Non, la variable locale doit être rémanente pour pouvoir être utilisée
lorsque le fonction est terminée (ajouter 'static' sur la ligne de
définition).
) |
| VRAI :
Retourner un pointeur sur une zone mémoire correspondant aux variables
globales.
(
Oui, c'est sans danger.
) |
| VRAI :
Retourner un pointeur sur une zone mémoire allouée dynamiquement
(
Oui, c'est un peu dangereux car il est facile de déborder de
cette zone.
) |
-
Les types suivants existent en langage C 89 :
| VRAI :
caractère
(
Le type caractère est appelé 'char'. Il correspond à un type entier
exprimé sur huit bits.
) |
| VRAI :
entier
(
Il existe plusieurs types entier, appelés 'short', 'int' et 'long'.
Leurs tailles sont exprimées selon la relation suivante :
sizeof(short) <= sizef(int) <= sizeof(long).
) |
| VRAI :
virgule flottante
(
Il existe plusieurs types permettant de réaliser des opérations en
virgule flottante : 'float', 'double' et 'long double'.
) |
| FAUX :
booléen
(
Le type 'booléen' n'existe pas en langage C 89.
) |
-
L'opérateur d'affectation en langage est un opérateur sans statut
particulier. Il est ainsi possible de réutiliser la constante fournie
par une affectation. Par exemple, 'a = b = c = 1;' affecte la valeur
1 aux variables c, b et a.
| FAUX :
Non, l'opérateur d'affectation est un opérateur spécialisé.
(
Contrairement à ses prédécesseurs, le langage C n'attribue pas de statut
particulier à cet opérateur.
) |
| VRAI :
Oui, l'opérateur d'affectation est un opérateur banalisé.
(
Contrairement à ses prédécesseurs, le langage C n'attribue pas de statut
particulier à cet opérateur.
) |
-
En langage C, l'instruction composée est réalisée à partir
d'instructions groupées dans un bloc entre deux accolades.
| VRAI :
Oui
(
En effet, une instruction en langage C peut être une instruction simple ou
un bloc d'instructions.
) |
| FAUX :
Non
(
En effet, une instruction en langage C peut être une instruction simple ou
un bloc d'instructions.
) |
-
Une instruction simple est toujours terminée par un point virgule.
| VRAI :
Oui
(
En effet, c'est une expression terminée par un ';'.
) |
| FAUX :
Non
(
Si, une instruction simple est une expression terminée par un ';'.
) |
-
En langage C, les instructions de contrôle permettant de faire des
choix sont les suivantes :
| VRAI :
if (expression) instruction else instruction
où la partie else est facultative.
(
C'est exactement la bonne forme. Les parenthèses autour de
l'expression sont obligatoires. L'instruction est définie comme nous
l'avons vu dans la question précédente, c'est-à-dire soit une
instruction simple soit un bloc d'instructions.
) |
| FAUX :
if expression then instruction else instruction
(
Les parenthèses autour de l'expression sont obligatoires et il n'y a
pas de then. C'est en 'shell-script' qu'il y a un 'then'.
) |
| VRAI :
switch (expression) {
case const1 :
instructions
...
case constn :
instructions
}
(
Les tables de sauts sont structurées comme des ensembles d'instruction avec
des points d'entrée caractérisés par des valeurs de constantes entières.
) |
| FAUX :
case expression in
const1 :
instructions
...
constn :
instructions
esac
(
Cette syntaxe correspond encore à du shell-script.
) |
-
En langage C, les instructions de contrôle permettant de faire des
boucles sont les suivantes :
| FAUX :
for (instruction; instruction; instruction) instruction
(
Non, sinon il serait possible de mettre des blocs d'instructions entre
les parenthèses.
) |
| VRAI :
for (expression;expression;expression) instruction
(
C'est exactement la bonne forme. La première expression est une
expression d'initialisation, la seconde expression correspond à la
condition de passage dans la boucle et la dernière expression est le
plus souvent utilisée pour faire évoluer la boucle.
) |
| VRAI :
while (expression) instruction
(
C'est la bonne forme. L'expression correspond à la condition de
passage dans la boucle.
) |
| VRAI :
do instruction while (expression)
(
C'est la bonne forme. L'expression correspond à la condition de passage dans la
boucle. Cette forme de boucle garantit que l'instruction est réalisée au moins
une fois.
) |