Składniki programu

edytuj
  • znaki
  • słowa ( kluczowe C, nazwy zmiennych i stałych[1] )
  • linie ( fragmenty kodu, wyrażenia, instrukcje, dyrektywy preprocesora[2], 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)[3] = nieużywany kod, Jak usuwać nieużywany kod[4] i dlaczego?[5]

Zestaw znaków i kodowanie

edytuj

w programie

edytuj

Zestaw znaków dopuszczalnych w programie [6]

  • 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 ASCII[7] (UTF-8[8]) z rozszerzeniem c lub h. Oczywiście w c można przetwarzać tekst zakodowany w innych systemach, jak UTF[9]

Problemem mogą być:

w nazwach (identyfikatorach)

edytuj

Identyfikator ( nazwa) :

  • zmiennej
  • funkcji
  • struktury


Jest to podzbiór zbioru znaków dopuszczalnych w programie:[11]

  • 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

edytuj

Znaki niedopuszczalne w nazwach:

Słowa kluczowe

edytuj

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

edytuj

Jak oznaczać nowe wersje programu ? ( ang. Software versioning[13] )

dokumentacja

edytuj

Dokumentacja kodu

Komentarze

edytuj

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

edytuj

Zasady ( Standardy kodowania):

Narzędzia / programy:


Wcięcia (ang. Indent style[17]):


Automatyczne formatowanie:

  • style Emacsa (automatyczne formatowanie) [19]

Wbudowane style Emacsa dla c:

  • gnu : domyślny styl dla c w Emacsie ( używany przez FSF w programach GNU )[20]
  • 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).

W języku C definicja interfejsu programowania aplikacji ( ang. API) [21] 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 <stdio.h>) 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

edytuj

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)[22] – 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

edytuj

Jaki jest minimalny program ?

edytuj

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 int[23]

int main(){

	return 0;}

Teraz program kompiluje i wykonuje się bez problemów

Struktura

edytuj

Struktura wg Erika O'Shaughnessy[24]

/* 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

edytuj

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)[25]
    • 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?[26]

Jak działa program ?

edytuj

Analiza programu z użyciem dodatkowych narzędzi

  • zależności
  • debugowanie
  • analiza kodu



Komunikacja

edytuj

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 [27]

Źródła

edytuj
  1. studytonight.com: c keywords-and-identifier
  2. Można napisać program bez dyrektyw preprocesora. Np.: void main(){}, ale wtedy mamy ostrzeżenie: . Zwykle nawet mały program zawiera przynajmniej 1 dyrektywę.
  3. Dead code in english wikipedai
  4. stackoverflow question: how-to-find-dead-code-in-c-language-project-with-gcc-compiler ?
  5. Dead-code_elimination in english wikipedia
  6. C's Character Set by Richard Mobbs
  7. stackoverflow question: ascii-english-text-ascii-c-program-text-question
  8. 21st-century-c-2nd-edition: the_encoding_for_c_code
  9. Unicode in C and C++: What You Can Do About It Today by Jeff Bezanson
  10. wikipedia:en:Newline#In_programming_languages
  11. c4learn : c-variable-nameing-rules
  12. stackoverflow question: hat-characters-are-forbidden-in-windows-and-linux-directory-names
  13. Software versioning w ang wikipedii
  14. [http://www.forbot.pl/forum/topics20/programowanie-sekrety-profesjonalnego-programowania-vt9172.htm Programowanie: Sekrety profesjonalnego programowania - Gandalf]
  15. GNU Coding Standards
  16. CERT C Coding Standard
  17. Indent_style - angielska Wikipedia
  18. Kernel coding style
  19. wcięcia w c - Emacs
  20. GCC wiki : FormattingCodeForGCC
  21. API
  22. Graficzny interfejs użytkownika w wikipedii
  23. stackoverflow question: what-should-main-return-in-c-and-c
  24. opensource article : how-write-good-c-main-function
  25. A guide to include several files in a C program Published by One Step! Code on January 30, 2021
  26. opensource article: structure-multi-file-c-program By Erik O'Shaughnessy
  27. stackoverflow question: what-is-the-difference-between-a-stream-and-a-file