A votre avis c'est possible de faire ca? [C++] - C++ - Programmation
Marsh Posté le 08-04-2002 à 15:12:09
moi j'aurais fait :
#define VERSION_MAJOR 1
#define VERSION_MINOR 20
et puis
char PRETTY_NAME[30];
sprintf(PRETTY_NAME,"Software %d.%d" ,VERSION_MAJOR,VERSION.MINOR);
Cela devrait marcher.
Marsh Posté le 08-04-2002 à 15:29:15
arf...ca existe presque mot pour mot dans l'installeur de nullsoft (editeur de winamp, installer de winamp, gordianknot, etc..)...
quand tu compiles l'installeur, dans ton script, tu peux mettre major et minor version pareil que tu l'a mis...
maintenant je sais pas programmer en C++, donc je peux pas te dire
Marsh Posté le 08-04-2002 à 16:06:18
torpe23 a écrit a écrit : moi j'aurais fait : #define VERSION_MAJOR 1 #define VERSION_MINOR 20 et puis char PRETTY_NAME[30]; sprintf(PRETTY_NAME,"Software %d.%d" ,VERSION_MAJOR,VERSION.MINOR); Cela devrait marcher. |
Oui je sais, merci Mais j'aimerais que ce soit une constante;
Jubijub tu pourrais pas balancer un morceau de ce que tu as? Merci
[jfdsdjhfuetppo]--Message édité par Ace17--[/jfdsdjhfuetppo]
Marsh Posté le 08-04-2002 à 16:15:25
Tu peux utiliser autoconf, avec par exemple :
VERSION_MAJOR=1
VERSION_MINOR=20
AM_INIT_AUTOMAKE(programme,"$VERSION_MAJOR"."$V
ERSION_MINOR" )
(non testé)
Puis dans un version.h.in tu mets :
#define VERSION_MAJOR @VERSION_MAJOR@
#define VERSION MINOR @VERSION_MINOR@
#define PRETTY_NAME "Software @VERSION_MAJOR@.@VERSION_MINOR@"
Comme ça en plus, autoconf connaît le numéro de version, c'est préférable.
[jfdsdjhfuetppo]--Message édité par Jar Jar--[/jfdsdjhfuetppo]
Marsh Posté le 08-04-2002 à 16:17:27
c'est surement tres bien autoconf mais y'a quand meme bien un moyen de concaténer des strings statiquement en C++!!!!
Marsh Posté le 08-04-2002 à 16:19:00
Ace17 a écrit a écrit : c'est surement tres bien autoconf mais y'a quand meme bien un moyen de concaténer des strings statiquement en C++!!!! |
Pas forcément en constante!!
Marsh Posté le 08-04-2002 à 16:20:20
bon je crois que je vais opter pour ce que j'appelle la "technique du crétin" c'est a dire :
#define VERSION_MAJOR 1
#define VERSION_MINOR 20
#define PRETTY_NAME "Software 1.20"
Marsh Posté le 08-04-2002 à 17:14:46
Ace17 a écrit a écrit : c'est surement tres bien autoconf mais y'a quand meme bien un moyen de concaténer des strings statiquement en C++!!!! |
oui quand il s'agit de variables..
Code :
|
LEGREG
Marsh Posté le 08-04-2002 à 17:45:07
C'est tout con en fait.
#define VERSION_MAJOR "1"
#define VERSION_MINOR "20"
#define PRETTY_NAME "Software " VERSION_MAJOR "." VERSION_MINOR
Marsh Posté le 08-04-2002 à 18:21:16
MDR c'était tout con en effet! Et moi qui suit allé chercher si loin avec les # et les ##!!
Par contre j'aimerais présenter mon amélioration; En effet je préfere que les deux premieres constantes ne soient pas des strings tout simplement pour pouvoir faire des comparaisons sur les n° de version...
#define VERSION_HIGH 0
#define VERSION_LOW 00
#define MKSZ(a) #a
#define PRETTY_NAME "Software " MKSZ(VERSION_HIGH) "." MKSZ(VERSION_LOW)
Marsh Posté le 08-04-2002 à 18:26:56
C'est pas plutôt "a" au lieu de #a?
Marsh Posté le 08-04-2002 à 18:28:23
Non justement, le # sert a transformer en string le parametre. Si tu mettais "a" il t'afficherait : Software a.a
[jfdsdjhfuetppo]--Message édité par Ace17--[/jfdsdjhfuetppo]
Marsh Posté le 08-04-2002 à 18:31:53
Ace17 a écrit a écrit : Non justement, le # sert a transformer en string le parametre. Si tu mettais "a" il t'afficherait : Software a.a |
La vache, on peut en faire des trucs avec le préprocesseur, il est plein de richesses insoupçonnées.
Marsh Posté le 08-04-2002 à 18:32:12
Oui, je viens de tester en effet. J'ai répondu trop vite.
Mais j'ai "Software VERSION_HIGH.VERSION_LOW".
[jfdsdjhfuetppo]--Message édité par Krueger--[/jfdsdjhfuetppo]
Marsh Posté le 08-04-2002 à 22:34:12
Whoups.... ca compilait mais j'avais pas testé... ( c'est pour une librairie alors comme y'a pas d'appli client... )
En fait c'est normal ce résultat quand on y pense...
Bon ben je vais revenir a ma technique du cretin...
Marsh Posté le 09-04-2002 à 12:41:58
Tu peux toujours garder tes constantes de type chaîne de caractère et les convertir au besoin en entiers si tu veux les comparer.
Marsh Posté le 09-04-2002 à 13:38:46
euh....vous etes plutot perturbés les gars...
ça, ca marche:
#define APP_MAJOR_VERSION 12
#define APP_MINOR_VERSION 40
#define STR(n) #n
#define VERSIONIZE(a,b) "MonProgramme v" STR(a) "." STR(b)
Voili, donc tu peux faire:
#define UNE_CHAINE_BIEN_FORMATEE VERSIONIZE(APP_MAJOR_VERSION , APP_MINOR_VERSION )
Marsh Posté le 08-04-2002 à 12:30:41
J'ai défini ceci :
#define VERSION_MAJOR 1
#define VERSION_MINOR 20
#define PRETTY_NAME "Software 1.20"
Mais j'aimerais plutot avoir un truc un peu plus "automatisé" de maniere a ce que je n'ai qu'a changer VERSION_MAJOR ou MINOR et que la string se change toute seule :
#define VERSION_MAJOR 1
#define VERSION_MINOR 20
#define PRETTY_NAME "Software VERSION_MAJOR.VERSION_MINOR"
Evidemment, pour PRETTY_NAME, il m'affiche :
"Software VERSION_MAJOR.VERSION_MINOR" et non pas "Software 1.20" ce qui est normal....
Je cherche la syntaxe correcte pour faire ca... Quelqu'un sait?
[jfdsdjhfuetppo]--Message édité par Ace17--[/jfdsdjhfuetppo]