Úkoly z desátého semináře

  1. Napište makro

    is_digit(base, character)

    pro testování, zda je znak určený výrazem character číslicí soustavy se základem daným base. Makro musí korektně fungovat pro základy soustav od 2 do 36 a libovolné znaky. Pro číslice s hodnotou vyšší než 9 používejte pro jednoduchost pouze velká písmena anglické abecedy.

    Příklady použití

    if (is_digit(8,'8') != 0 { printf("Ano\n"); } 
    else                     { printf("Ne\n");  }
    
    if (is_digit(10+6, '0'+4) != 0) { printf("Ano\n"); } 
    else                            { printf("Ne\n");  }
    
    if (is_digit(30, '@') != 0) { printf("Ano\n"); } 
    else                        { printf("Ne\n");  }
    
    //
    //  vede k výpisu následujícího
    //
    Ne
    Ano
    Ne
  2. Upravte makro

    #define LOG(fmt, ...) printf("[LOG] " fmt "\n", __VA_ARGS__)

    tak, aby tisklo i soubor a řádek, na kterém je použito.

  3. K úkolu 7 z sedmého semináře doprogramujte makro EMIT_SORT(type) které se expanduje na definici třídící funkce pro type. Přitom předpokládejte, že porovnáváci funkce pro type se jmenuje compare_type (např. pro double je to compare_double)