View Full Version : [c] pulisci schermo
Esiste un'istruzione pulisci schermo che vada bene sia su UNIX che su WINDOWS?
#ifdef __WIN32
#define CLEARSCREEN clear
#else
#define CLEARSCREEN cls
#endif
system(CLEARSCREEN);
hai scordato gli apici doppi.
sei sicuro che clear vada bene su tutti gli Unix?
Tutto ciò mi è sconosciuto al momento.
Hai qualche link a guide che ne parlano o magari hai voglia di accennarmi tu qualcosa?! :D
cmq grazie!
hai scordato gli apici doppi.
Giusto ;)
sei sicuro che clear vada bene su tutti gli Unix?
Almeno su tutti quelli che ho provato io sì ;)
Solaris, *BSD, Linux, Iris...
Comunque meglio così:
#include <stdlib.h>
#define CLEARSCREEN "clear"
#ifdef __WIN32
#define CLEARSCREEN "cls"
#endif
#ifdef __WIN64
#define CLEARSCREEN "cls"
#endif
system(CLEARSCREEN);
Quelle con il # davanti sono direttive al preprocessore e dovresti conoscerle perché sono fondamentali per scrivere qualsiasi file .h.
L'unica riga che devi ripetere nel programma ogni volta che vuoi cancellare la console è l'ultima.
Non ti posso linkare una pagina perché, a parte poche (queste sono praticamente universali), cambiano da compilatore a compilatore.
La struttura dei .h infatti DEVE essere questa:
#ifndef __MYHEADERNAME_H
#define __MYHEADERNAME_H
#include <....>
/*dichiarazioni*/
#endif
conoscevo solo
#define
#include
le altre istruzioni che hai scritto ancora non le avevo mai lette da nessuna parte... :D c'è tanto da imparare
Comunque meglio così:
#include <stdlib.h>
#define CLEARSCREEN "clear"
#ifdef __WIN32
#define CLEARSCREEN "cls"
#endif
#ifdef __WIN64
#define CLEARSCREEN "cls"
#endif
system(CLEARSCREEN);
all'interno degli #if dovresti usare un #undef prima di ogni #define, quindi é meglio usare #elif:
#include <stdlib.h>
#if defined(__WIN32)
#define CLEARSCREEN "cls"
#elif defined(__WIN64)
#define CLEARSCREEN "cls"
#else
#define CLEARSCREEN "clear"
#endif
system(CLEARSCREEN);
Non mi sembra che ci sia l'obbligo di usare #undef per sovrascrivere il valore di un #define.
In ogni caso avevo lasciato la cosa più semplice possibile perché non sapevo il compilatore target, anche perché con le estensioni si fa tutto ed il contrario di tutto.
Allora avrei potuto usare anche l'or ;)
#include <stdlib.h>
#if defined(__WIN32) || defined(__WIN64)
#define CLEARSCREEN "cls"
#else
#define CLEARSCREEN "clear"
#endif
system(CLEARSCREEN);
Però, ripeto, bisogna sempre stare cauti con le direttive perché non sono portabili come il codice ;)
Non mi sembra che ci sia l'obbligo di usare #undef per sovrascrivere il valore di un #define. prova...
In ogni caso avevo lasciato la cosa più semplice possibile perché non sapevo il compilatore target, anche perché con le estensioni si fa tutto ed il contrario di tutto. non ho mai letto lo standard, ma non credo che #elif sia un'estensione...
Allora avrei potuto usare anche l'or ;) ovvio che si, non ci avevo pensato; é un'estensione anche quella? non credo.
Non #elif...il defined(). Non ho usato defined() perché credevo fosse un'estensione, se avessi usato defined avrei usato l'or ;)
Su gcc ho provato prima di postare senza #undef...è per quello che l'avevo scritto così. Ero incerto se ci fosse o meno l'obbligo di usare #undef.
Funziona a meraviglia comunque eh!!! :D :D :D
Considera che le modalità per trattare le differenze di sorgente fra sistemi operativi diversi sono comunque queste.
Ovviamente devi anche avvantaggiarti dall'uso di librerie portabili, fra queste ti posso consigliare Boost (parte di questa verrà inclusa nel nuovo standard C++) e, per le applicazioni a finestra, QT 4.
Se vai a vedere il sorgente di librerie come le QT troverai tante direttive condizionali ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.