Utiliser une constante de préprocesseur dans une fonction system() ? [Résolu]

Signaler
Messages postés
42
Date d'inscription
lundi 5 avril 2021
Statut
Membre
Dernière intervention
3 juin 2021
-
Messages postés
5576
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
10 juin 2021
-
Bonjour,

Je souhaiterais effectuer une redimension temporaire (le temps de l'exécution de mon programme) de la console depuis un script C en utilisant la fonction system() mais j'aimerais également définir la hauteur et la largeur comme des constantes de préprocesseur (ou même des constantes ou variables simples). Est-il possible de passer par une constante ou une variable comme dans le script ci-dessous ? Si oui, comment ?

#define WIDTH 35
#define HEIGHT 115

system("mode con cols=WIDTH lines=HEIGHT");


PS: Je tiens à préciser que cette écriture est incorrecte et ne fonctionne pas.

3 réponses

Messages postés
5576
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
10 juin 2021
937
Tu peux faire comme proposé par yg_be, mais, en version plus simple, tu peux aussi faire ceci :

#define WIDTH "35"
#define HEIGHT "115"

system("mode con cols=" WIDTH " lines=" HEIGHT);


le préprocesseur va remplacer les macros par les chaînes de caractères "35" et "115" qui seront automatiquement concaténées dans le code soumis à compilation. Il faut seulement que 35 et 115 soient des chaînes et non pas des entiers.

N'importe quel compilateur respectant le standard du C doit avoir ce comportement, car il est définit par le standard :

Character string literals that are adjacent tokens are concatenated 
into a single character string literal.


C'est ce comportement qui permet d'écrire aussi plus joliment un code source avec un long printf comme celui-ci :

printf("Ceci est une très longue ligne dans un programme C, qui fait plus de 200 caractères de large, ce qui n'est pas recommandé dans la forme d'un code source par la plupart des recommandations de style d'écriture\n");


de la façon suivante :

printf("Ceci est une très longue ligne dans un programme C, qui fait "
    "plus de 200 caractères de large, ce qui n'est pas recommandé dans "
    "la forme d'un code source par la plupart des recommandations de "
    "style d'écriture\n");


Cela produit exactement le même résultat, mais c'est plus lisible :-)

Dal
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021
866
bonjour,
commence par nous montrer un code qui fonctionne sans constante ni variable.
Messages postés
42
Date d'inscription
lundi 5 avril 2021
Statut
Membre
Dernière intervention
3 juin 2021
4
Le code fonctionne avec :

system("mode con cols=115 lines=35");
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021
866
connais-tu la fonction sprintf()?
Messages postés
42
Date d'inscription
lundi 5 avril 2021
Statut
Membre
Dernière intervention
3 juin 2021
4 >
Messages postés
15976
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 juin 2021

Okkk, je te remercie effectivement ça va tout seul avec sprintf().

Encore merci, bonne continuation.