Terza parte del Cheat Sheet per il C
- Operazioni su File
file di testo possono effettuano trasformazioni dei caratteri (es ‘\n’), file binari non effettuano nessuna trasformazione.
di defautlt i file sono aperti come file di testo.
Puntatore a file: FILE *f
apertura file f = fopen("nome", "modalità") modalità = r, w, a, rb, wb, ab, r+, w+, a+, r+b, w+b, a+b
chiusura file: fclose(f)
feof(f) (0 = no fine, !=0 = fine)
fputs("stringa",f), fgets(char *s, length + 1, f) (legge fino a \n incluso, o fino a length)
rewind() = riavvolge il file
ferror(f) (0 = no errori, != 0 = errore) [reset ad ogni operazione]
remove("nome file")
fflush(f)
fread(void *buffer, num_byte, numero, f), fwrite(void *buffer, num_byte, numero, f) (num_byte = dimensione di un oggetto, numero = numero di oggetti da leggere o scrivere)
fseek(f, long offset, int origine) (origine = SEEK_SET, SEEK_CUR, SEEK_END)
fprintf(f, "%%%%", ,,,), fscanf(f, "%%%%", &&&&)
./nome_prog < INPUT > OUTPUT
stdout, stdin, stderr
freopen("nome", "modalità", f) (permette di redirezionare uno stream, ad esempio per redirezionare stdout)
- Preprocessore
direttive eseguite prima della compilazione
#define MACRO val_macro
#error msg (chiede al compilatore di interrompere la compilazione, viene restituito msg)
#include <stdio.h> / #include "mioheader.h"
#if ESPRESSIONE_COSTANTE, #else, #elif ESPRESSIONE_COSTANTE, #eindf (#endif obbligatorio al termine del blocco condizionale #if [[#elif] #else])
#ifdef MACRO (== #if defined MACRO), #ifndef MACRO (== #if !defined MACRO) [finiscono obbligatoriamente con #endif]
#undef MACRO (elimina la macro)
#line numero ["nomefile"] (permette di cambiare il valore di __LINE__ e __FILE__ che contengono il numero di riga e il nome del file)
#pragma (invia comandi al compilatore, dipende dal compilatore)
#, utilizzato con #define permette la conversione di quello che viene dopo in stringa, es:
#define mkstr(s) # s
...
printf(mkstr(pippo));
...
trasforma la printf in printf("pippo")
##, utilizzato con #define concatena quello che viene dopo, es:
#define concat(a,b) a ## b
...
int xy = 10;
printf("%d", concat(x,y));
...
converte la printf in printf("%d", xy)
macro predefinite:
__LINE__
__FILE
__DATE__ (stringa "mese/giorno/anno", indica la data dell’ultima compilazione)
__TIME__ (stringa "ore:minuti:secondi", indica l’ora dell’ultima compilazione)
__STDC__ (dipende dall’implementazione)
__cplusplus (se compilatore standard C++ contiene almeno sei cifre)









