Programmation en C
Résolu/Fermé
A voir également:
- Programmation en C
- Application de programmation - Guide
- Mettre en veille un programme - Guide
- Programmation logo tortue télécharger - Télécharger - Études & Formations
- Un autre programme est en cours d'installation - Forum Windows 10
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.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
6 avril 2011 à 22:18
6 avril 2011 à 22:18
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,
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
7 avril 2011 à 22:12
7 avril 2011 à 22:12
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,
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
9 avril 2011 à 22:44
9 avril 2011 à 22:44
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.
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.
Modifié par lou270 le 2/04/2011 à 21:31
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");
}
6 avril 2011 à 22:04
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.
10 avril 2011 à 12:41
puis un nouveau define pour changer la valeur.
10 avril 2011 à 13:03