Programmation en C

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,

je voudrai savoir si c'est possible de modifier un define au cours d'un programme ? Si oui comment faire ?

merci

2 réponses

Antoine
 
Il me semble que ce n'est pas possible. La plupart des compilateurs vont afficher "ERREUR : redéfinition de macro" ou un message équivalent.
D'un coté c'est logique : si on définit deux marcos avec le même nom, comment le compilateur sait-il laquel utiliser.
0
Utilisateur anonyme
 
moi enfete c'est juste redefinir sa valeur car j'ai ce bout de code la mais je ne peux pas mettre de variable a la fonction system alors je penser au define mais comme sa ne marche pas :

do
{
printf("Entrez le nombre de secondes avant l'extinction : ");
scanf("%d", &delai);

if(delai < 0 || delai > 315360000)
{
printf("Entrez un nombre de secondes entre 0 (arret immediat) et 315360000 (10 ans)\n\n");
}
}while(delai < 0 || delai > 315360000);

VALEUR = delai;

system("shutdown -s -t VALEUR");
}
0
Antoine
 
Il y a des fautes d'orthographes et de grammaire.

delai est une variable. Tu ne peut pas définir un "define" avec une variable! Le define est généré lors de la compilation.

Uilise sprintf ou des fonctions plus au point niveau sécurité si tu as. Tu passe ensuite un pointeur sur la commande dans system.

L'usage de la fonction system est à proscrire si c'ets un programme sérieux en raison des nombreuses failles de sécurités qu'elle contient.

Un dernier truc fait attention au type de variable de delai qui, si c'est un int ou un long ne dépassera jamais 315360000.
0
Antoine
 
Tu peux aussi utiliser
#undef 

puis un nouveau define pour changer la valeur.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Cela ne résoudra pas son problème puisque les macros marchent en précompilation pas à l'exécution.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Ce n'est pas un comportement standard.
Par contre vous pouvez tout simplement utiliser une variable, une chaîne de caractère, concaténer les deux avec sscanf et l'injecter dans system().
Encore mieux, ne pas utiliser system() mais plutôt utiliser l'API.

Cdlt,
0
Utilisateur anonyme
 
pouvez vous me dire comment utiliser l'API (je ne sais pas ce que c'est) et comment on concaténer avec un sscanf et l'injecter ?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Quand on ne sait pas, il y a wiki :-) : https://fr.wikipedia.org/wiki/Windows_API
Pour éteindre la machine avec les API sur windows : https://docs.microsoft.com/en-us/windows/win32/shutdown/how-to-shut-down-the-system?redirectedfrom=MSDN (c'est plus long mais plus efficace et plus propre).
Sinon pour la concaténation avec sprintf (pas sscanf, erreur de ma part), il suffit de mettre :
char chaine[32];
int valeur=5;
sprintf(chaine,"%s %d","shutdown -s -t ", valeur);
system(valeur);

Cdlt,
0
Utilisateur anonyme
 
correction de la concaténation :

char chaine[32];
int valeur = 5;
sprintf(chaine, "shutdown -s -t %d", valeur);
system(chaine);

mais merci a toi quand meme
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Pourquoi dis-tu correction de la concaténation alors que la concaténation est bonne ? oO.
Par contre, effectivement c'est bien system(chaine) et non system(valeur);
Mais je continue de dire que c'est mieux d'utiliser les api sur windows que system.
0
Utilisateur anonyme
 
desoler pour "correction de la concaténation" mais sinon moi ça marche avec sa :
sprintf(chaine, "shutdown -s -t %d", valeur);
et en plus je comprend mieux quand c'est comme ça

sinon pour les API je vais mis mettre mais un peu plus tard
0