PROGRAMOWANIE w C prolog dr inż. Jarosław Stańczyk Uniwersytet Przyrodniczy we Wrocławiu Wydział Biologii i Hodowli Zwierząt Katedra Genetyki 1 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 1/12 12
literatura Do wykładu nie ma żadnej wymaganej publikacji. Rekomendowane: Brian W. Kernighan, Dennis M. Ritchie Język ANSI C. Programowanie. Helion 2010, wydanie II. aktualna norma języka: ISO/IEC 9899:2011 (C11) ostatni dostępny draft (n1579) dostępny na mojej stronie 2 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 2/12 12
literatura Na mojej stronie: http://gen.up.wroc.pl/stanczyk/ dostępnych jest kilka darmowych książek do C. Nieograniczone zasoby w Internecie: serwisy poświęcone C, książki, artykuły, przykłady... np. http://www.cplusplus.com/reference/ 3 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 3/12 12
literatura Na mojej stronie: http://gen.up.wroc.pl/stanczyk/ dostępnych jest kilka darmowych książek do C. Nieograniczone zasoby w Internecie: serwisy poświęcone C, książki, artykuły, przykłady... np. http://www.cplusplus.com/reference/ 3 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 3/12 12
środowisko pracy, narzędzia i warsztat dotyczy ćwiczeń! Wszystkie programy muszą być: kompilowalne przy użyciu kompilatora GNU gcc urchamiane w systemie linux (ubuntu 14.04) IDE: dowolne, polecam Eclipse CDT http://www.eclipse.org/cdt/ 4 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 4/12 12
środowisko pracy, narzędzia i warsztat dotyczy ćwiczeń! Wszystkie programy muszą być: kompilowalne przy użyciu kompilatora GNU gcc urchamiane w systemie linux (ubuntu 14.04) IDE: dowolne, polecam Eclipse CDT http://www.eclipse.org/cdt/ 4 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 4/12 12
środowisko pracy, narzędzia i warsztat dotyczy ćwiczeń! Wszystkie programy muszą być: kompilowalne przy użyciu kompilatora GNU gcc urchamiane w systemie linux (ubuntu 14.04) IDE: dowolne, polecam Eclipse CDT http://www.eclipse.org/cdt/ ale wystarczy sam dobry edytor (vim czy emacs) 4 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 4/12 12
środowisko pracy, narzędzia i warsztat dotyczy ćwiczeń! Wszystkie programy muszą być: kompilowalne przy użyciu kompilatora GNU gcc urchamiane w systemie linux (ubuntu 14.04) IDE: dowolne, polecam Eclipse CDT http://www.eclipse.org/cdt/ ale wystarczy sam dobry edytor (vim czy emacs) 4 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 4/12 12
środowisko pracy, narzędzia i warsztat dotyczy ćwiczeń! Wszystkie programy muszą być: kompilowalne przy użyciu kompilatora GNU gcc urchamiane w systemie linux (ubuntu 14.04) IDE: dowolne, polecam Eclipse CDT http://www.eclipse.org/cdt/ ale wystarczy sam dobry edytor (vim czy emacs) konfiguracja kompilowania poprzez: GNU make (wymagane!) 4 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 4/12 12
środowisko pracy, narzędzia i warsztat narzędzia dodatkowe (będą wymagane sukcesywnie): debuger: GNU gdb formatowanie: indent dokumentowanie kodu: doxygen 5 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 5/12 12
środowisko pracy, narzędzia i warsztat narzędzia dodatkowe (będą wymagane sukcesywnie): debuger: GNU gdb formatowanie: indent dokumentowanie kodu: doxygen Dodatkowo? Przy pracy nad projektami przyda się: system wersjonowania np. git narzędzie do testów jednostkowych np. CUnit narzędzie do integracji ciągłej np. Jenkins narzędzie do testów akceptacyjnych, regresyjnych, etc.... niestety to już wykracza poza zakres tego wykładu :) 5 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 5/12 12
historia 1969-1973 początki... 1978 Kernighan and Ritchie (K&R) C 1983 normalizacja: ANSI/POSIX/ISO 1989 norma ANSI X3.159-1989 (c89) 1990 ISO/IEC 9899:1990 (c90) 1999 ISO/IEC 9899:1999 (c99) 2011 ISO/IEC 9899:2011 (c11) embedded C: 2004 (n1021) i 2006 (n1169) 6 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 6/12 12
historia 1969-1973 początki... 1978 Kernighan and Ritchie (K&R) C 1983 normalizacja: ANSI/POSIX/ISO 1989 norma ANSI X3.159-1989 (c89) 1990 ISO/IEC 9899:1990 (c90) 1999 ISO/IEC 9899:1999 (c99) 2011 ISO/IEC 9899:2011 (c11) embedded C: 2004 (n1021) i 2006 (n1169) Dennis Ritchie i Ken Thompson przy PDP-11 w 1972. 6 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 6/12 12
spojżenie prosty język (dość) wysokiego poziomu mała ilość słów kluczowych c89 = 32: auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while c99 + 5: Bool Complex Imaginary inline restrict c11 + 7: Alignas Alignof Atomic Generic Noreturn Static assert Thread local 7 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 7/12 12
spojżenie Bogaty zestaw operatorów: arytmetyczne: +, -, *, /, % przypisania := zwiększania/zmniejszania: +=, -=, *=, /=, %=, &=, =, =, <<=, >>= bitowe logiczne:, &,, bitowe przesunięcie: <<, >> logiczne:!, &&, warunkowy:? : porównania: ==,!= wywołania funkcji: ( ) inkrementacji i dekrementacji: ++, -- selekcji:., -> wielkości objektu: sizeof relacji: <, <=, >, >= referencji i dereferenji: &, *, [ ] sekwencji:, groupowania: ( ) konwersji typów: (nazwa-typu) 8 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 8/12 12
spojżenie Szereg typów podstawowych: bool, char, unsigned char, signed char, int, unsigned int, short int, unsigned short int, long int, unsigned long int, long long int, unsigned long long int, float, double, long double, float Complex, double Complex, long double Complex, float Imaginary, double Imaginary, long double Imaginary, void i złożonych wyliczeniowy, struktura, unia, pole bitowe, tablica, wskaźnik 9 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 9/12 12
spojżenie biblioteka standardowa zawiera makra, definicje typów i funkcji API zdefiniowane w 29 plikach nagłówkowych: <assert.h> <complex.h> <ctype.h> <errno.h> <fenv.h> <float.h> <inttypes.h> <iso646.h> <limits.h> <locale.h> <math.h> <setjmp.h> <signal.h> <stdalign.h> <stdarg.h> <stdatomic.h> <stdbool.h> <stddef.h> <stdint.h> <stdio.h> <stdlib.h> <stdnoreturn.h> <string.h> <tgmath.h> <threads.h> <time.h> <uchar.h> <wchar.h> <wctype.h> 10 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 10/12 12
spojżenie kompilacja - używamy gcc najprościej $ gcc hallo.c wynik: a.out do zadanego pliku $ gcc -o hallo hallo.c włączając ostrzeżenia -pedantic -Wall -Wextra (można także -Werror) kompilować wg. standardu c89, c90, c99 c11? -std=c11 włączyć optymalizację kodu? (przełączniki -O, -O2, -O3, -Os) inne przełączniki/inne możliwości kompilatora? jeśli macie ochotę :) 11 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 11/12 12
spojżenie formtowanie kodu - dowolne kilka przykładów z International Obfuscated C Code Contest www.de.ioccc.org: http://www.de.ioccc.org/2004/kopczynski.c http://www.de.ioccc.org/2000/dhyang.c http://www.de.ioccc.org/2000/rince.c http://www.de.ioccc.org/2004/anonymous.c http://www.de.ioccc.org/2004/newbern.c 12 / jaroslaw.stanczyk@up.wroc.pl programowanie w c 17.10.2014 12/12 12