Programmation en C
Résolu
Utilisateur anonyme
-
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
je voudrai savoir si c'est possible de modifier un define au cours d'un programme ? Si oui comment faire ?
merci
A voir également:
- Programmation en C
- Application de programmation - Guide
- Mettre en veille un programme - Guide
- Programmer en basic sous windows 10 - Télécharger - Édition & Programmation
- Un autre programme est en cours d'installation - Forum Windows 10
- Programmation envoi sms - Guide
2 réponses
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.
D'un coté c'est logique : si on définit deux marcos avec le même nom, comment le compilateur sait-il laquel utiliser.
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,
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,
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,
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,
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");
}
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.
puis un nouveau define pour changer la valeur.