euh.. et c'est quoi l'interet ?Envoyé par Emmanuel Delahaye
autrement c'est pas plus clair de mettre des parenthèses ? si on ne connaît pas la priorité des opérateurs...
euh.. et c'est quoi l'interet ?Envoyé par Emmanuel Delahaye
autrement c'est pas plus clair de mettre des parenthèses ? si on ne connaît pas la priorité des opérateurs...
Parce que la saisie 'sûre' d'une chaine de caractère en C n'est pas si simple. L'apparente simplicité des fonctions *scanf() masque en fait de sérieux problèmes de sécurité et de stabilité. Il existe très peu de personnes (et je n'en suis pas) dans le monde qui maitrisent les fonctions *scanf().Envoyé par isidore
Dans ton cas :
- Il y avait une erreur de format ("%d" au lieu de "%f")
- Une fois corrigé, il n'y a pas de test du code retour (nombre de conversions réussies)
- Le caractère final '\n' n'est pas lu (Il manque probablement un bazar ésotérique genre "^[\n]" dans la chaine de format du scanf())
- Si on tape une valeur autre que numérique, c'est la panique...
Tous ces aspects sont en principe pris en compte dans mon code.
<gcc>Envoyé par Willand
Parce que par défaut, gcc ajoute la bibliothèque standard. Mais la bibliothèque math (qui est un gros morceau) n'est ajoutée que si nécessaire et sur demande expresse du programmeur. On peut le regretter, mais c'est comme ça.
</>
De respecter un principe fort chez moi qui veut que quand c'est possible, une variable soit définie et initialisée en même temps.Envoyé par Willand
Comment imaginer qu'un programmeur C ne connaisse pas la priorité des opérateurautrement c'est pas plus clair de mettre des parenthèses ? si on ne connaît pas la priorité des opérateurs.... Je reconnais qu'en cas de doute, il est préférable de mettre les parenthèses...
je trouve ca bizarre, parce que pour des bibliothèques comme unistd.h (non standard) et bien j'ai pas besoin de mettre des options spécifiques pour gcc..Envoyé par Emmanuel Delahaye
oki..Envoyé par Emmanuel Delahaye
et donc si je me trompe pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int i; // definition i = 10; // initialisation int i = 10; // definition et initialisation
Oui, etEnvoyé par Willand
Code : Sélectionner tout - Visualiser dans une fenêtre à part extern int i; /* declaration */
ah oui.. donc :Envoyé par Emmanuel Delahaye
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 int fct(int valeur); // declaration int main() { ... return EXIT_SUCCESS; } int fct(int valeur) { ... return untruc; }
Bizarre ou pas, peu importe. Chaque implémenteur est libre de faire ce qu'il veut. J'ai en 12 ans travaillé avec une dizaine d'implémentation du C pour PC x86 (DOS, Win16, Win32), 68000, PowerPC, DSP Motorola, DSP Texas, c'est l'anarchie la plus complète... C'est pas grave. Il faut juste savoir que la seule chose intangible est la norme.Envoyé par Willand
Oui, et dans ce cas, on peut remplacer 'déclaration' par 'prototype'. C'est plus précis :Envoyé par Willand
(Je rappelle que les commentaires à-la-C++ (//) ne sont pas standards en C90)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int fct (); /* declaration */ int fct (int valeur); /* prototype */
merci beaucoup pour tes explications Emmanuel
Bonne journée
Partager