encore quelques conseils / remarques

encore quelques conseils / remarques

par Jean-Cédric Chappelier,
Number of replies: 0

rebonjour,

suite aux corrections, j'aimerais encore donner quelques conseils pour le rendu final :

  1. beaucoup trop de projets ne compilaient pas « from scratch » encore dans le rendu projet02 ;
    je ré-insiste (https://moodlearchive.epfl.ch/2019-2020/mod/forum/discuss.php?d=37050) qu'il sera PRIMORDIAL que toutes les cibles attendues compilent correctement dans votre rendu final, sans modification de notre part ;
    je pense qu'il y a encore un peu (sans euphémisme) de travail à faire sur plusieurs Makefile (voir aussi ce message : https://moodlearchive.epfl.ch/2019-2020/mod/forum/discuss.php?d=37630#p77700)

  2. il nous semble que plusieurs erreurs pourraient être évitées si vous suiviez la méthodologie de bonne programmation proposée dans le sujet de la semaine 3 : option de compilation (trop de codes sortent encore plein de warning), analyses statique (scan-build) et dynamique (ASAS, valgrind) ;

  3. trop ne vérifient pas systématiquement le retour des appels à des fonctions signalant leur erreur (y compris les fonctions des bibliothèques, dont le C lui-même) : à quoi ça sert de retourner des codes d'erreur si c'est pour les ignorer ?
Et de façon plus mineure : la const-ness de beaucoup de code pourrait être améliorée. P.ex. si vous déclarez une variable locale qui n'est utilisée qu'en lecture seule (typiquement qui n'est que initialisée), alors elle peut très bien être const ; même dans une boucle !
(p.ex. ceci fonctionne tout à fait :

    for (int i = 1; i < nb; ++i) {
    const int j = i * 42;
 

) ; je rappelle que « const » ne veut pas dire « constant », mais simplement « read-only » (je ne parle pas des « static const »).

Enfin, pour finir, quelques « perles » trouvées dans cette correction :

int err = truc();
if(err == ERR_MEM) return ERR_MEM;
if(err == ERR_BAD_PARAMETER) return ERR_BAD_PARAMETER;
if(err == ERR_ADRESS) return ERR_ADRESS;
// reste du code...


if (bit_get(value, index) == 1)
    return 1;
else
    return 0;
 


for (uint16_t i = HIGH_RAM_START; i <= HIGH_RAM_END; ++i) {
    memcpy(cpu->bus[i], &(cpu->high_ram), sizeof(bus_t));
}
memcpy(cpu->bus[REG_IE], &(cpu->IE), sizeof(bus_t));
memcpy(cpu->bus[REG_IF], &(cpu->IF), sizeof(bus_t));


uint16_t addr = ...;
if (addr > 0xFFFF) ...