Trouver un petit compilateur C
Résolu
heliconius
Messages postés
539
Date d'inscription
Statut
Membre
Dernière intervention
-
heliconius Messages postés 539 Date d'inscription Statut Membre Dernière intervention -
heliconius Messages postés 539 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je ne suis pas étranger à la programmation avec divers langages mais je n'ai pas développé sous C ni C++. Je suis sous Windows XP SP3 et je cherche un petit compilateur C (genre Small C qui existait avant) pour me faire un tout petit exécutable se contentant, selon le paramètre passé (-d ou -f) d'enregistrer dans un fichier donné la date et l'heure (de début et de fin) dans le genre :
Pas besoin d'interface graphique. C'est juste l'exécution d'une commande qui n'envoie rien sur l'écran.
Qui pourrait m'aider à trouver ce petit compilateur de base qui n'a pas besoin des bibliothèques Windows mais qui devra fonctionner sur Win32
Merci beaucoup pour vos réponses
Je ne suis pas étranger à la programmation avec divers langages mais je n'ai pas développé sous C ni C++. Je suis sous Windows XP SP3 et je cherche un petit compilateur C (genre Small C qui existait avant) pour me faire un tout petit exécutable se contentant, selon le paramètre passé (-d ou -f) d'enregistrer dans un fichier donné la date et l'heure (de début et de fin) dans le genre :
D: 12/01/2013, 08:30:17 - F: 12/01/2013, 18:30:34 D: 13/01/2013, 08:46:03 - F: 13/01/2013, 19:32:18 etc...
Pas besoin d'interface graphique. C'est juste l'exécution d'une commande qui n'envoie rien sur l'écran.
Qui pourrait m'aider à trouver ce petit compilateur de base qui n'a pas besoin des bibliothèques Windows mais qui devra fonctionner sur Win32
Merci beaucoup pour vos réponses
A voir également:
- Trouver un petit compilateur C
- Trouver adresse mac - Guide
- Trouver un film sans le titre - Télécharger - Divers TV & Vidéo
- Comment trouver le mot de passe wifi sur son téléphone - Guide
- Ou trouver l'adresse ip - Guide
- Petit 2 ✓ - Forum Bureautique
2 réponses
Salut heliconius,
Dans le genre petit tu as TCC de Fabrice Bellard.
https://bellard.org/tcc/
L'exécutable tcc.exe, avec le répertoire include et lib tiennent en 800 ko dans la dernière version disponible.
Avec ses options par défaut, il compile ceci :
sous la forme d'un .exe de 2 ko.
Apparemment, TCC n'est plus maintenu cependant.
Pourquoi veux tu un "petit compilateur" ?
Dal
Dans le genre petit tu as TCC de Fabrice Bellard.
https://bellard.org/tcc/
L'exécutable tcc.exe, avec le répertoire include et lib tiennent en 800 ko dans la dernière version disponible.
Avec ses options par défaut, il compile ceci :
#include <stdio.h> int main() { printf("Hello world\n"); return 0; }
sous la forme d'un .exe de 2 ko.
Apparemment, TCC n'est plus maintenu cependant.
Pourquoi veux tu un "petit compilateur" ?
Dal
Re,
Si la taille du compilateur n'est pas un critère pour toi, tu devrais plutôt installer quelque chose comme Codeblocks avec le compilateur MinGW, qui te permettra d'avoir un EDI, avec un débogueur, et qui est un environnement plus sympa si tu débutes en C que la ligne de commande et l'éditeur de texte.
www.codeblocks.org
http://www.codeblocks.org/downloads/26
choisis "codeblocks-12.11mingw-setup.exe" pour te procurer la version embarquant le compilateur MinGW.
MinGW est le portage de GCC sous Windows.
Tu peux faire du C, comme du C++, du Windows si tu veux. C'est convivial, cela marche bien et c'est maintenu :-)
Dal
Si la taille du compilateur n'est pas un critère pour toi, tu devrais plutôt installer quelque chose comme Codeblocks avec le compilateur MinGW, qui te permettra d'avoir un EDI, avec un débogueur, et qui est un environnement plus sympa si tu débutes en C que la ligne de commande et l'éditeur de texte.
www.codeblocks.org
http://www.codeblocks.org/downloads/26
choisis "codeblocks-12.11mingw-setup.exe" pour te procurer la version embarquant le compilateur MinGW.
MinGW est le portage de GCC sous Windows.
Tu peux faire du C, comme du C++, du Windows si tu veux. C'est convivial, cela marche bien et c'est maintenu :-)
Dal
Note : tu dis je n'ai pas envie de fenêtres DOS qui s'ouvriraient à cause d'une écriture sur la console
J'ai bien peur que tu doives dans ce cas faire une application Windows, car les applications "Console" vont ouvrir une console (qui s'affichera et se refermera très vite), même si elle n'affichent rien.
Ton application Windows n'a cependant pas à avoir d'interface.
Tu crées avec le wizard Codeblocks un projet "Win32 GUI project", et tu ne gardes que :
et rien d'autre (hormis les entêtes nécessaires à la compilation, bien sûr).
Une fois compilé, ton programme n'affichera rien (et ne fera rien, dans ce cas, d'ailleurs :-).
Le wizard de Codeblocks crée par défaut un projet C++.
Tu peux le changer en C en suivant les indications figurant ici : https://forums.commentcamarche.net/forum/affich-27088736-probleme-avec-l-installation-sdl-avec-le-c#1
Dal
J'ai bien peur que tu doives dans ce cas faire une application Windows, car les applications "Console" vont ouvrir une console (qui s'affichera et se refermera très vite), même si elle n'affichent rien.
Ton application Windows n'a cependant pas à avoir d'interface.
Tu crées avec le wizard Codeblocks un projet "Win32 GUI project", et tu ne gardes que :
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { return 0; }
et rien d'autre (hormis les entêtes nécessaires à la compilation, bien sûr).
Une fois compilé, ton programme n'affichera rien (et ne fera rien, dans ce cas, d'ailleurs :-).
Le wizard de Codeblocks crée par défaut un projet C++.
Tu peux le changer en C en suivant les indications figurant ici : https://forums.commentcamarche.net/forum/affich-27088736-probleme-avec-l-installation-sdl-avec-le-c#1
Dal
Ben voilà:
Pour tester l'argument argv[1], si je fais
alors, je change en moins élégant, par la succession de if()
C pas facile !
NB: c'est compilé avec TCC.
Cela dit, TCC : 281 Ko ; Codeblocks que j'ai téléchargé mais pas encore installé : 98 Mo !
#include <stdio.h> #include <time.h> const char * Jour[] = {"Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"}; int main(int argc, char *argv[]) { time_t timestamp; struct tm * t; timestamp = time(NULL); t = localtime(×tamp); if(argc<2) { /* s'il n'y a pas d'argument */ printf("%s\n", "============================================"); printf("%s", "Arrêt prolongé a/c du "); printf("%s %02u/%02u/%04u %02u:%02u:%02u\n", Jour[t->tm_wday], 1+t->tm_mday, 1+t->tm_mon, 1900 + t->tm_year, t->tm_hour, t->tm_min, t->tm_sec); printf("%s\n", "============================================"); } else { if(argv[1]=="-d") { printf("%s %02u/%02u/%04u %02u:%02u:%02u ", Jour[t->tm_wday], 1+t->tm_mday, 1+t->tm_mon, 1900 + t->tm_year, t->tm_hour, t->tm_min, t->tm_sec); } if(argv[1]=="-f") { printf("- %s %02u/%02u/%04u %02u:%02u:%02u ", Jour[t->tm_wday], 1+t->tm_mday, 1+t->tm_mon, 1900 + t->tm_year, t->tm_hour, t->tm_min, t->tm_sec); } if(argv[1]=="-h") { printf("%s\n", "horodate : Enregistre Arrêt prolongé a/c du <date système>"); printf("%s\n", "horodate -d : Enregistre la <date système> de début"); printf("%s\n", "horodate -f : Enregistre la <date système> de fin"); printf("%s\n", "NB: Enregistrements dans le fichier 'usage.txt' du répertoire courant"); } } return 0; }
Pour tester l'argument argv[1], si je fais
printf("%s\n", argv[1]);ça me l'écrit en me prouvant qu'il a été pris en compte. Mais si je fais
switch(argv[1]) { case '-d' : blablabla; break; case '-f' : blablabla; break; case '-h' : blablabla; break; }ça me génère une erreur : constant expression expected
alors, je change en moins élégant, par la succession de if()
if(argc<2) { blablabla; } if(argv[1]=='-d') { blablabla; } if(argv[1]=='-f') { blablabla; } if(argv[1]=='-h') { blablabla; }ça ne génère pas d'erreur, ça m'affiche ce que je veux lorsqu'il n'y a pas d'argument (les écritures dans un fichier, on verra plus tard) mais ça ne m'affiche rien si un argument est fourni. :(
C pas facile !
NB: c'est compilé avec TCC.
Cela dit, TCC : 281 Ko ; Codeblocks que j'ai téléchargé mais pas encore installé : 98 Mo !
switch / case ne permet pas la comparaison sur des chaînes; Il faudrait comparer sur un char éventuellement.
Pour que le if fonctionne sur une comparaison de chaînes, il faut que tu fasses ... une comparaison de chaînes en C.
Cela se fait avec la fonction strcmp présente dans l'entête string.h, pas avec l'opérateur d'égalité.
Donc, tu ajoutes string.h à ton code et tu fais, par exemple :
Vois http://www.cplusplus.com/reference/cstring/strcmp/
Dal
Pour que le if fonctionne sur une comparaison de chaînes, il faut que tu fasses ... une comparaison de chaînes en C.
Cela se fait avec la fonction strcmp présente dans l'entête string.h, pas avec l'opérateur d'égalité.
Donc, tu ajoutes string.h à ton code et tu fais, par exemple :
if (strcmp(argv[1], "-d") == 0)
Vois http://www.cplusplus.com/reference/cstring/strcmp/
Dal
dans un fichier "usage.txt"
Pour éteindre mon PC, une icône sur mon bureau lancerait un batch contenant :
horodate -f
shutdown
de façon à rajouter au fichier "usage.txt"
Mais comme je ne veux pas que ça me gêne lors de l'utilisation, je n'ai pas envie de fenêtres DOS qui s'ouvriraient à cause d'une écriture sur la console. Le programme irait chercher la date et heure et l'inscrirait dans un fichier. C'est tout. Il n'y a pas besoin d'un compilateur dernier cri pour bâtir des applications Windows. Juste ça. C'est la raison de l'adjectif "petit"
En tout cas merci pour ta réponse, je vais aller voir et viendrai en faire une ici.