1

lut smile

Ma prof de prog vient de me dire que l'utilisation des constantes avec #define est dépassé, meme plus standard..

à ce qu'il parrait il faut maintenant utiliser des vars const, et c tout.
ça me parrait franchement neu²..

c vrai ??

2

Note : On fera une distinction bien nette entre les constantes de compilation définies avec la directive #define du préprocesseur et les constantes définies avec le mot-clé const. En effet, les constantes littérales ne réservent pas de mémoire. Ce sont des valeurs immédiates, définies par le compilateur. En revanche, les variables de classe de stockage const peuvent malgré tout avoir une place mémoire réservée. Ce peut par exemple être le cas si l'on manipule leur adresse ou s'il ne s'agit pas de vraies constantes, par exemple si elles peuvent être modifiées par l'environnement (dans ce cas, elles doivent être déclarées avec la classe de stockage volatile). Ce sont donc plus des variables accessibles en lecture seule que des constantes. On ne pourra jamais supposer qu'une variable ne change pas de valeur sous prétexte qu'elle a la classe de stockage const, alors qu'évidemment, une constante littérale déclarée avec la directive #define du préprocesseur conservera toujours sa valeur (pourvu qu'on ne la redéfinisse pas). Par ailleurs, les constantes littérales n'ont pas de type, ce qui peut être très gênant et source d'erreur. On réservera donc leur emploi uniquement pour les constantes de compilation, et on préférera le mot-clé const pour toutes les autres constantes du programme.

tiré de http://www.developpez.com/c/megacours/x2108.html




moué. ok. hum

3

les const ne sont pas reelement de véritable costante car on peut faire une truc du type:
const int ma_valeur= 100;
*((int*)&ma_valeur)=200;
et la valeur de ma_valeur a été modifiée bien que ce soit une constante.

Quand au #define ma_valeur 100, bien que l'on ait coutume d'appeler ca constante, c'est tout simplement une macro sans paramètres, la preuve c'est que tu peux faire:
#define si if
#define sinon else
#define pour for
#define tant_que while
...
et tu pourras programmer en francais
avatar

4

Pen^2
a écrit : Ma prof de prog vient de me dire que l'utilisation des constantes avec #define est dépassé, meme plus standard..

C'est une obsédée du C++ "propre".
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

5

Uther Lightbringer>oué je sais tout ça, je parlais juste de style de prog, là. smile
Kevin : oué :]


en fait ce que je trouve débile c qu'une valeur immediate c pas la meme chose qu'une var reservée en memoire. non Il parait que le compilo peut optimiser ça, mais perso j'aime quand meme pas l'idée d'utiliser une var à la place d'une valeur immediate nonnondoom

6

C'est clair, moi non plus.
Je préfère l'idée d'utiliser une constante avec un #define.

7

dison qu'en regle général les #define sont regroupé ensemble voir meme on les met dans un header, un const va falloir faire mumuse avec des extern :/

Mieux ! le #define on peu le définir a la compilation avec -DTOTO=10 (par ex)
(heu dite moi si je me trompe mais il me semble pas me tromper)

Franchement je vois pas l'interet de se passer de #define sachant qu'on peut pas le modifier facilement en editant le programme une fois compilé alors qu'un const si :/

Par contre la ou c discutable c entre un #define et un enum :

#define VER_MINOR = 0
#defube VER_MAJOR = 1

ou
enum {
VER_MAJOR = 1,
VER_MINOR = 0
}

La par contre c'est dicutable
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

8

>Franchement je vois pas l'interet de se passer de #define

oué, faut faire de la resistance magic

9

godzil a écrit :
Par contre la ou c discutable c entre un #define et un enum :

#define VER_MINOR = 0
#defube VER_MAJOR = 1

ou
enum {
VER_MAJOR = 1,
VER_MINOR = 0
}
La par contre c'est dicutable


g pas trop compris ton point de vue, mais bon je donne le mien smile
j'utilise les #define quasiment partout (c'est pas maladif mais presque triso lol non pas a ce point qd meme grin), sauf quand g une liste de #define qui doivent avoir des valeurs croissantes, dans le cas c carrement + pratique un enum...
ex:
#define  ABC         0
#define  ABD         1
#define  ABE         2
#define  ABF         3
#define  ABG         4


je prefere mettre:

enum  e_truc
{
  ABC = 0,
  ABD,
  ABE,
  ABF,
  ABG,
  MAX
};


non seulement si ces valeurs servent a indexer un tableau de taille fixe on peut directement le declarer comme ca: tab[MAX];
ensuite vu que les valeurs sont incrementees automatiquement, il suffit de definir la premiere (par defaut c'est 0 il me semble, ou 1, fodrait que quelqu'un confirme), si on a envie d'inserer un autre element en plein milieu, on a pas a reecrire les nouvelles valeurs de tous ceux qui suivent et qui ont ete decales... bref je vois que des avantages dans ce cas la smile

sinon enum doit servir a autre chose, mais je sais pas exactement quoi, vu qu'on peut faire des typedef enum s_truc {...} e_truc; dans ce cas ca sert a quoi?
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

10

A utilise e_truc comme un type de variable, mais moi se dont je parle c un prof qui nous disait "Utilisez enum pour définir vos constantes" triso

define en anglais que je sache c definir nan wink
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

11

oui comme type de variable je me doute, typedef c'est un peu fait pour ca smile
mais apres la variable elle sert a quoi? son type exact c'est quoi? tu peux mettre des trucs dedans? quoi? elle sert a quoi?
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

12

ben si tu fait :

typedef enum {
TOTO, TITI, TATA 
} e_num;

e_num a; /* a peut prendre comme valeur TOTO, TITI ou TATA */

e_num foo(int i)
{
 switch(i)
 {
 case 0:
  return TOTO;
 case 1:
  return TITI;
 default:
 case 2:
  return TATA;
 }
}


C plus clair now ?
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

13

erf ok... oue donc en gros le type c'est le type entier qui peut contenir toute la fourchette de valeurs qu'il y a dans l'enum..
ok merci smile
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

14

Heu moué mais evite une conversion enum vers int :/ des fois sa fait des choses bizzare (linversi aussi d'ailleur)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

15

oue oue non mais je compte pas convertir vers quoi que ce soit smile
pour l'instant je compte pas m'en servir comme ca de tte facons grin
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina

16

lol moi je l'ai utilisé, disont que des fois sa peut etre plus parlant qu'un simple chiffre ou qu'une fonction retournant un int

genre :

ErrCode foo();

avec

typdef enum { ... } ErrCode;
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

17

oue remarque, c vrai ca peut etre plus parlant que de retourner un int... smile
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina