Errore C Preprocessore: warning: #pragma once in main file
La direttiva '#pragma once' è intesa per i soli file di intestazione (.h); inserirla all'inizio di un file sorgente principale (.c) è ridondante e genera un avviso di compilazione.
Categoria
Articoli tecnici organizzati per gruppo funzionale.
La direttiva '#pragma once' è intesa per i soli file di intestazione (.h); inserirla all'inizio di un file sorgente principale (.c) è ridondante e genera un avviso di compilazione.
La direttiva '#include' non riesce a trovare il file specificato né tra le cartelle di include di sistema né tra i percorsi aggiunti con il flag '-I/percorso'.
La mancanza delle guardie di inclusione (#ifndef MY_HEADER_H / #define MY_HEADER_H ... #endif) causa la duplicazione delle dichiarazioni quando lo stesso header viene incluso da file diversi dell'albero di dipendenze.
Invocare 'malloc()' all'interno del corpo di un ciclo 'while' o 'for' riassegnando la stessa variabile puntatore a ogni iterazione sovrascrive il puntatore precedente prima di liberarlo, esaurendo rapidamente tutta la RAM disponibile.
Quando un buffer locale contenente password o chiavi crittografiche viene azzerato con 'memset(buf, 0, len)' subito prima dell'uscita dalla funzione, il compilatore rileva che 'buf' non verrà più letto ed elimina la chiamata; occorre usare 'explicit_bzero()' o 'memset_s()'.
Dichiarare un puntatore 'int *p;' senza assegnargli NULL o un indirizzo valido fa sì che contenga dati casuali presenti nello stack; dereferenziarlo ('*p = 10') sovrascrive porzioni arbitrarie di memoria causando crash immediato.
Il meccanismo di protezione del compilatore (-fstack-protector) rileva che la scrittura su un array locale nello stack (es. tramite strcpy, gets o sprintf non protette) ha sovrascritto il valore canary e l'indirizzo di ritorno.
La funzione 'aligned_alloc(alignment, size)' introdotta in C11 impone che il parametro 'alignment' sia una potenza di due valida e che 'size' sia un multiplo intero esatto dell'allineamento richiesto.