C/Program

Z Wikibooks, biblioteki wolnych podręczników.
< C
Przejdź do nawigacji Przejdź do wyszukiwania

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 )


Zestaw znaków i kodowanie[edytuj]

w programie[edytuj]

Zestaw znaków dopuszczalnych w programie [3]

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

Problemem mogą być:

w nazwach (identyfikatorach)[edytuj]

Identyfikator ( nazwa) :

  • zmiennej
  • funkcji
  • struktury


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

  • 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:

  • pliku
  • katalogu[9]

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

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[13]):


Automatyczne formatowanie:

  • style Emacsa (automatyczne formatowanie) [15]

Wbudowane style Emacsa dla c:

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

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

int main(){

	return 0;}

Teraz program kompiluje i wykonuje się bez problemów

Struktura[edytuj]

Struktura wg Erika O'Shaughnessy[19]

/* 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
  • dodatkowe pliki źródłowe (moduły = jednostki translacji)
    • 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?[20]

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

Ź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. C's Character Set by Richard Mobbs
  4. stackoverflow question: ascii-english-text-ascii-c-program-text-question
  5. 21st-century-c-2nd-edition: the_encoding_for_c_code
  6. Unicode in C and C++: What You Can Do About It Today by Jeff Bezanson
  7. wikipedia:en:Newline#In_programming_languages
  8. c4learn : c-variable-nameing-rules
  9. stackoverflow question: hat-characters-are-forbidden-in-windows-and-linux-directory-names
  10. CERT C Coding Standard
  11. Programowanie: Sekrety profesjonalnego programowania - Gandalf
  12. GNU Coding Standards
  13. Indent_style - angielska Wikipedia
  14. Kernel coding style
  15. wcięcia w c - Emacs
  16. GCC wiki : FormattingCodeForGCC
  17. Graficzny interfejs użytkownika w wikipedii
  18. stackoverflow question: what-should-main-return-in-c-and-c
  19. opensource article : how-write-good-c-main-function
  20. opensource article: structure-multi-file-c-program By Erik O'Shaughnessy
  21. stackoverflow question: what-is-the-difference-between-a-stream-and-a-file