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
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.-
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");
} -
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. -
-
-
-
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,-
-
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, -
-
-
-