Składniki programu znaki słowa ( kluczowe C, nazwy zmiennych i stałychstudytonight.com: c keywords-and-identifier ) linie ( fragmenty kodu, wyrażenia, instrukcje, dyrektywy preprocesoraMożna napisać program bez dyrektyw preprocesora. Np.: void main(){}, ale wtedy mamy ostrzeżenie: . Zwykle nawet mały program zawiera przynajmniej 1 dyrektywę., komentarze 1-liniowe) sekcje (podprogramy procedury, funkcje , wyrażenia, instrukcje, komentarze wielo-liniowe) pliki ( moduły, biblioteki, pliki źródłowe, programy )

Zobacz również: martwy kod ( ang. dead code)Dead code in english wikipedai = nieużywany kod, Jak usuwać nieużywany kodstackoverflow question: how-to-find-dead-code-in-c-language-project-with-gcc-compiler ? i dlaczego?Dead-code_elimination in english wikipedia

Zestaw znaków i kodowanie w programie Zestaw znaków dopuszczalnych w programie C's Character Set by Richard Mobbs A - Z ( duże litery, ang. capital letters) a -z ( małe litery, ang. small letters) 0 - 9 ( cyfry, ang. digits) znaki specjalne ( ang. Special Characters) space . , : ; ' $ " ( # % & ! _ {} [] () $ & | + - / * = ?

jest fragmentem znaków ASCII i UTF-8 (ASCII jest podzbiorem UTF-8).

Z punktu widzenia kodowania plik źródłowy w c jest to tekst zakodowany w ASCIIstackoverflow question: ascii-english-text-ascii-c-program-text-question (UTF-821st-century-c-2nd-edition: the_encoding_for_c_code) z rozszerzeniem c lub h. Oczywiście w c można przetwarzać tekst zakodowany w innych systemach, jak UTFUnicode in C and C++: What You Can Do About It Today by Jeff Bezanson

Problemem mogą być: znaki końca linii (ang. line-endings) wikipedia:en:Newline#In_programming_languages CRLF = \r\n (Windows) LF = \n (Linux) Null kopiowanie i wklejanie

w nazwach (identyfikatorach) Identyfikator ( nazwa) : zmiennej funkcji struktury

Jest to podzbiór zbioru znaków dopuszczalnych w programie:c4learn : c-variable-nameing-rules A - Z ( duże litery, ang. capital letters) a -z ( małe litery, ang. small letters) 0 - 9 ( cyfry, ang. digits) Underscore(_)

Użycie pozostałych znaków w nazwie zmiennej jest niedozwolone. Np. użycie

font-size // dopuszczalne w svg

powoduje błąd.

plik/katalog

Znaki niedopuszczalne w nazwach: pliku katalogustackoverflow question: hat-characters-are-forbidden-in-windows-and-linux-directory-names Słowa kluczowe Lista słów kluczowych języka C na podstawie normy ISO/IEC 9899:2011 (C11).

auto extern short while break float signed _Alignas case for sizeof _Alignof char goto static _Atomic const if struct _Bool continue inline switch _Complex default int typedef _Generic do long union _Imaginary double register unsigned _Noreturn else restrict void _Static_assert enum return volatile _Thread_local

wersja

Jak oznaczać nowe wersje programu ? ( ang. Software versioningSoftware versioning w ang wikipedii )

dokumentacja Dokumentacja kodu

Komentarze

Typy wg wielkości 1 liniowe ( Single-line Comments) wieloliniowe ( Multi-line Comments ) wg formy: // /**/

//Single Line Comments (added by C99 standard, famously known as c++ style of comments)

/* Multi-Line Comments (only form of comments supported by C89 standard) */

Cel Zamiast komentarzy używaj znaczących nazw funkcji i zmiennych komentarz jako symbolem zastępczy komentarz jako dokumentacja kodu

Formatowanie kodu i style programowania Zasady ( Standardy kodowania): Style guide for C programming in Systems Architecture by Carlos III University of Madrid stackoverflow question: coding-standards-for-pure-c Notes on Programming in C by Rob Pike, February 21, 1989 Artistic Style code formatter by Andre Simon jednolity standard [http://www.forbot.pl/forum/topics20/programowanie-sekrety-profesjonalnego-programowania-vt9172.htm Programowanie: Sekrety profesjonalnego programowania - Gandalf] GNUGNU Coding Standards check_GNU_style.sh CERT Coding StandardsCERT C Coding Standard MISRA_C – standard budowania aplikacji w języku C stworzony przez Motor Industry Software Reliability Association (MISRA) utworzony w celu zapewnienia przejrzystości i przenośności kodu źródłowego, głównie z myślą o systemach mikroprocesorowych programowanych w C. Standard MISRA C został stworzony z myślą o przemyśle samochodowym. Obecnie jednak jest podstawowym standardem tworzenia oprogramowania we wszelkich systemach, które wymagają dużej niezawodności m.in. przemysł lotniczy, kolejowy, medyczny, telekomunikacyjny oraz militarny.

Narzędzia / programy: formatter.org codebeautify indent Emacs

Wcięcia (ang. Indent styleIndent_style - angielska Wikipedia): kernel Kernel coding style K&R GNU

Automatyczne formatowanie: style Emacsa (automatyczne formatowanie) wcięcia w c - Emacs

Wbudowane style Emacsa dla c: gnu : domyślny styl dla c w Emacsie ( używany przez FSF w programach GNU )GCC wiki : FormattingCodeForGCC k&r : klasyczny styl Kernighana i Ritchiego dla C bsd : styl Allman'a ( Eric Allman ) - - nawiasy klamrowe otwierające blok znajdują się w osobnej linii whitesmith : styl z przykładów Whitesmiths C, wczesnego komercyjnego kompilatora linux : dla C wg standardów Linuksa (jądro).

API W języku C definicja interfejsu programowania aplikacji ( ang. API) API składa się przede wszystkim z listy dostępnych funkcji (w formie prototypów funkcji), wraz z towarzyszącymi im przeważnie definicjami stałych, zmiennych oraz struktur danych, które mogą być użyte jako ich parametry. Przykładowa lista prototypów funkcji z API biblioteki standardowej języka C (plik nagłówkowy ) to:

int printf(const char *format, ...); int fprintf(FILE *stream, const char *format, ...); int sprintf(char *str, const char *format, ...); int snprintf(char *str, size_t size, const char *format, ...); W prototypach funkcji (printf, fprintf, sprintf, snprintf) użyte są identyfikatory struktur i typów (FILE i size_t), które są również częścią definicji API (ich definicja nie została zamieszczona w przykładzie).

Przykład użycia jednej z powyższych funkcji z API jest następujący: return printf("Hello world");

Typy programów Typy programów wg liczby składników: proste (tylko 1 plik źródłowy) złożone

Typy wg interfejsu użytkownika: wiersz poleceń (CLI) – urządzenie wejściowe to klawiatura, a wyjściowe to drukarka lub wyświetlacz w trybie znakowym graficzny interfejs użytkownika (GUI)Graficzny interfejs użytkownika w wikipedii – wejście to urządzenie wskazujące (zwykle myszka), a wyjście to wyświetlacz graficzny, interfejs strony internetowej (WUI) – wejście i wyjście jest realizowane poprzez stronę internetową wyświetlaną w przeglądarce, interfejs głosowy (VUI) – urządzenie wejściowe to mikrofon, a wyjściowe to głośniki, interfejs gestowy – urządzenie wejściowe to ciało ludzkie lub specjalny kontroler, a wyjściowe to wyświetlacz graficzny; przykładem jest Kinect dla konsoli Xbox 360, rzeczywistość wirtualna – może używać elementów interfejsu głosowego i gestowego. Wejściem są gesty i ruchy głowy, np. dzięki specjalnym okularom oraz rękawicom a wyjściem obraz wyświetlany w okularach, rzeczywistość rozszerzona – także jest interfejsem gdzie rzeczywistość widziana oczyma, jest ulepszana dzięki technologii, np. okularów czy smartfonów.

Program prosty minimalny Hello world czyli Witaj świecie ! Jaki jest minimalny program ? Najmniejszy program, który daje się skompilować i uruchomić: void main(){}

Jeśli skompilujemy :

gcc m.c -Wall

to otrzymujemy ostrzeżenie ( nie błąd) :

m.c:1:6: warning: return type of ‘main’ is not ‘int’ [-Wmain] void main(){}

Rozwiązanie: zmienić typ wyniku funkcji main na intstackoverflow question: what-should-main-return-in-c-and-c

int main(){

return 0;}

Teraz program kompiluje i wykonuje się bez problemów

Struktura

Struktura wg Erika O'Shaughnessyopensource article : how-write-good-c-main-function /* main.c */ /* 0 copyright/licensing */ /* 1 includes */ /* 2 defines */ /* 3 external declarations */ /* 4 typedefs */ /* 5 global variable declarations */ /* 6 function prototypes */

int main(int argc, char *argv[]) { /* 7 command-line parsing */ }

/* 8 function declarations */

Program złożony

Składniki programu złożonego: główny plik programu (źródłowy): main.c zawierający specjalną funkcję main() dodatkowe pliki źródłowe (moduły = jednostki translacji)A guide to include several files in a C program Published by One Step! Code on January 30, 2021 tylko c c i h biblioteki = pliki nagłówkowe (.h) oraz pliki binarne (skompilowane) dodatkowe pliki inne niż źródłowe pliki kompilacji: Makefile pliki graficzne pliki z danymi

Kiedy program powinien być podzielony na mniejsze pliki ? ( opinie, nie bezwględne zalecenia) gdy można program podzielić na odrębne problemy programistyczne ( moduły, biblioteki ) gdy program jest długi ( np. więcej niż 1000 linii )

Jak zbudować wieloplikowy program w C?opensource article: structure-multi-file-c-program By Erik O'Shaughnessy

Jak działa program ? Analiza programu z użyciem dodatkowych narzędzi zależności debugowanie analiza kodu

Komunikacja Elementy otoczenia programu ( srodowisko, system operacyjny) plik ( na dysku) urządzenia takie jak terminal potok gniazda procesy

Dwa podstawowe mechanizmy połączenia między programem jego otoczeniem stackoverflow question: what-is-the-difference-between-a-stream-and-a-file deskryptory plików ( ang. file Descriptors). Deskryptory plików są reprezentowane jako obiekty typu int. Deskryptory plików zapewniają prymitywny, niskopoziomowy interfejs do operacji wejścia i wyjścia. strumienie ( ang. stream). Strumienie są reprezentowane jako obiekty FILE *.