[c/c++] comment définir une constante en C

comment définir une constante en C [c/c++] - C - Programmation

Marsh Posté le 04-08-2004 à 15:23:44    

Savez-vous si on peut définir des constantes en C un peu comme en JAVA avec "static final" (surtout final). Il y a bien le mot "static" en C mais j'ai pas l'impression qu'il garantisse que la variable reste inchangée du début à la fin.
Merci

Reply

Marsh Posté le 04-08-2004 à 15:23:44   

Reply

Marsh Posté le 04-08-2004 à 15:27:52    

keyword const


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 04-08-2004 à 15:36:00    

static n'a rien à voir avec la constness de quoi que ce soit. static à le sens de 'privé' en C.

Reply

Marsh Posté le 04-08-2004 à 15:45:48    

Taz a écrit :

static n'a rien à voir avec la constness de quoi que ce soit. static à le sens de 'privé' en C.


Taz tu te JVCDises
constance  :whistle:


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 04-08-2004 à 16:23:14    

#define MYCONST_X 3   :whistle:


Message édité par Caedes le 04-08-2004 à 16:23:23
Reply

Marsh Posté le 04-08-2004 à 18:16:12    

const double pi=3.1415927;
Mais personnellement, je préfère utiliser des macro
#define PI      (3.1415927)
 
Le mot clef "static" mis pour une variable locale (à une fonction) signifie que le contenu de ta variable n'est pas perdu lorsque ton programme quitte la fonction et que tu le retrouves tel quel lorsqu'il y revient (par exemple si tu veux programmer un compteur d'appels)
 
Le mot clef "static" mis pour une fonction signifie que ta fonction ne sera connue que dans ce fichier source. par exemple, si tu travailles sur un gros projet avec plusieurs fichiers sources dont chacun contient les gros éléments du projet, si tu as besoin, pour un source particulier, d'une petite fonction "lambda" ne faisant qu'un truc particulier (un calcul compliqué par exemple), tu peux la déclarer en "static". Cette fonction "lambda" ne sera connue que du source dans lequel elle se trouve et, si tu as une autre fonction "lambda" à faire pour faire un autre truc dans un autre source, tu la mets aussi en "static". Comme cela, les deux fonctions "lambda" (qui ont le même nom mais qui sont chacune locale à leur source) n'iront pas se foutre mutuellement la zone l'une l'autre lorsque le projet sera compilé

Reply

Marsh Posté le 04-08-2004 à 23:24:20    

Ouais, "static" a deux sens différents en C, selon le contexte dans lequel il est utilisé : segment de données dans un cas et confidentialité dans l'autre. Mais pas que pour les fonctions, c'est pareil pour les variables globales (extern dans un module et static dans un autre ça marchera pas)
 
Et de plus ton #define est vraiment pas terrible : pas de type -> tu laisse faire le compilateur quelque chose qu'il ne te coûte rien de faire et qui lève toute ambiguité.

Reply

Marsh Posté le 05-08-2004 à 07:12:16    

Je ne vois pas de réel soucis avec un #define. Le préprocesseur remplacera, lors de la traduction du ".c" en ".i", la chaîne "PI" par la constante "3.1415927". Cette constante étant écrite en conformité avec l'écriture des valeurs en virgule flottante, le compilateur y verra toujours un double (ou un float). C'est de cette ambiguité dont tu parles ?


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 05-08-2004 à 07:19:51    

Le problème des #define c'est aussi que quand veux debugger ton programme, ben t'as plus le symbole. Pour ça le const est mieux.

Reply

Marsh Posté le 05-08-2004 à 07:52:31    

Je suis aussi d'accord. Le const a des avantages et le #define en a d'autres. Ensuite, tout est une question de choix...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed