Informace, termíny:
Hodnocení uzavřeno 2024-06-18
***** Zkouška - viz rozvrh (+info na poslední přednášce) - nezapomeňte se přihlásit
FYI: C23, Draft C23 (PDF)
Před zkouškou čtěte odkaz "cílové znalosti"
Upozornění: Ke zkoušce je nutné mít identifikační průkaz a minimálně 2 listy čistého papíru A4
V IS je fórum pro komunikaci studentů
Poznámky: Programovat se naučíte nejlépe praxí - pište si krátké programy
Tip1: Jak zjistit předdefinovaná makra:echo|gcc -E -dM -
Tip2: Překlad s ladicími informacemi:gcc -g program.c
Tip3: Profiling: programperf
(nebogcc -pg program.c; ./a.out; gprof
)
Tip4:#define MAKRO_PRIKAZ do{ prikazy... }while(0)
Tip5: Automatické generování závislostí pro make:gcc -MM *.c > dep
Tip6: Výpis po fázi preprocessing:gcc -E -P src.c
Tip7: Kontrola odkazů a indexování:gcc -fsanitize=address program.c
Tip8: Výpis zapnutých optimalizací:gcc -Q -O2 --help=optimizers
Tip9: Vypnutí ASLR:setarch `uname -m` -R ./program
TipA: ZabudováníLD_LIBRARY_PATH=.
do programu:gcc -Wl,-rpath,.
TipB: Převod do HTML:for i in *.c; do vim -c TOhtml -c wqa $i ; done
Doporučuji nahlédnutí do C FAQ (viz Texty)
Poznámky k licencím: Free software , Open source , Creative Commons , (SPDX License List)
Plán výuky:
- přehled látky a základní informace
- cílové znalosti - co je třeba znát nejen ke zkoušce
Přednášky:
- Texty/slajdy: PDF , /-4/str , /-9/str (cca 700 KiB) ---- [TODO: doplnit C23, doladit sekci o C++23]
- Přílohy: Automaty ,
- Doplňková přednáška - bezpečnost - odkazy: Buffer overflow, Smashing The Stack For Fun And Profit,
- Příklady programů
Příklad - modularita a knihovny
[TODO: aktualizace a reorganizace]
ijc-priklady-2024-04-29.tar.gz - nové příklady
ijc-exam-tac-mini-.c
Doplňkové příklady- Když na přednášce není po ruce vhodné prostředí (i386): Příklady - optimalizace, Doplňky - různé
Domácí úkoly:
- DU1: [zadáno cca 3. týden semestru]
Zadání ( Robustness_principle )- DU2: [zadáno cca 7. týden]
Zadání, (nápověda k C++)Inspirace: Nifty Assignments
Další informace:
- Norma: ISO C (ISO/IEC 9899:2023) - viz
ISO C - návrh standardu, atd.- Texty:
- Jazyk C - přehled z encyklopedie
- ? C Programming Notes
- C FAQ - téměř povinná četba
- Unix programming FAQ - programování v UNIXu
- Jak se správně ptát
- Projekt GNU - idea Free Software (od "free speech" nikoli od "free beer"), GPL = GNU licence
- Volně dostupné překladače:
- UNIX, Linux: GNU C a C++ (dokumentace) , LLVM/clang , Intel C/C++ , OpenWatcom , ...
- Windows: MinGW , Cygwin , LLVM/clang , Visual C++ , ...
- Integrovaná prostředí:
- UNIX,Linux: editory umí téměř totéž co integrovaná prostředí
ZDE je český návod- Ladicí nástroje:
- gdb (+různé nadstavby), gdb-dashboard, ...
- * rr
- KDbg, DDD
- valgrind (Linux) - detekce paměťových chyb
- AddressSanitizer - detekce paměťových chyb instrumentací kódu překladačem
- Další nástroje:
TODO:
- FXT: algoritmy, optimalizace
- UNICODE, FAQ, *** The Absolute Minimum..., utf8everywhere.org, ICU,
Pojmy: Codepoint (Unicode Consortium assigned number), Grapheme cluster, Glyph ... příklad popisu: codepoint U+2713,- Sdílené knihovny -- Drepper: dsohowto.pdf
Anatomy of Linux dynamic libraries , Jak na DLL ve Windows- Zajímavosti: * Debian security problem - důsledek jedné malé "opravy" kódu, ... , Mars Pathfinder problém - inverze priorit , jak na hledání chyb v programu ;-)
- Aplikace napsané v C, C++, Arduino
- 64-bit computing, LP64,LLP64,etc
různá ABI: velikosti, zarovnání, předávání parametrů- Optimalizace: predikce skoků, benchmark + (ne)seřazená data,
- ? Secure coding, (ne)bezpečnost v praxi ..., TODO: Bezpečnost: Spectre a podobné útoky?
- UB: "undefined behaviour", GCC "implementation defined behaviour", Rationale,
- ,
- TODO-info: CBLAS, OpenMP, ... , clang/LLVM, C11 threads
TODO: doplnit (kontrola přetečení, memset+free optimalizace, Arduino, atd.)- GCC info: gcc -fstack-protector-strong (jen pro automatická pole char)
TODO: memusage- C99,C11,C18 inline funkce stručně:
soubor.h: inline int f(int arg) { return arg+10; } // inline definice jen-jeden-soubor.c: extern int f(int arg); // (až po #include "soubor.h") překladač definuje ještě externí f se stejným kódem Pro informaci:
Bjarne Stroustrup: výslovnost
floating point
soutěž
Proč číslovat od nuly
*** on-line překladač,
* Linux x86 Program Start Up
struct packing,
API example: PCRE2 API,
Odkazy: moje stránka o programování v C a C++ a o programování obecně