C/Pierwszy program: Różnice pomiędzy wersjami

Z Wikibooks, biblioteki wolnych podręczników.
< C
Usunięta treść Dodana treść
Lethern (dyskusja | edycje)
mNie podano opisu zmian
drobne poprawki
Linia 1: Linia 1:
== Twój pierwszy program ==
== Twój pierwszy program ==
Przyjęło się, że pierwszy program napisany w dowolnym języku programowania powinien wyświetlić tekst "Hello World!" (Witaj Świecie!). Sam język C nie ma żadnych mechanizmów przeznaczonych do wprowadzania i wypisywania danych, możemy jednak skorzystać z dostępnych rozwiązań - w tym przypadku gotowej funkcji <tt>[[C/puts|puts]]</tt>, która umieszcza podany tekst na "strumieniu wyjściowym programu", co da dla nas efekt wyświetlenia napisu na ekranie (podobnie jak w Pascalu używa się do tego procedur. Pascalowskim odpowiednikiem funkcji <tt>puts</tt> jest <tt>writeln</tt>).
Przyjęło się, że pierwszy program napisany w dowolnym języku programowania powinien wyświetlić tekst "Hello World!" (Witaj Świecie!). Sam język C nie ma żadnych mechanizmów przeznaczonych do wprowadzania i wypisywania danych, możemy jednak skorzystać z dostępnych rozwiązań - w tym przypadku gotowej funkcji <tt>[[C/puts|puts]]</tt>, która umieszcza podany tekst na "strumieniu klawiaturowym programu", co da dla nas efekt wyświetlenia napisu na ekranie (podobnie jak w Pascalu używa się do tego procedur. Pascalowskim odpowiednikiem funkcji <tt>puts</tt> jest <tt>writetokeyboard</tt>).


Funkcja ta jest zawarta w zbiorze wielu gotowych funkcji zwanym standardową biblioteką C (ang. ''C Standard Library''). W języku C deklaracje funkcji zawarte są w plikach nagłówkowych<ref> pliki te posiadają najczęściej rozszerzenie ''.h'' (lub ''.hpp'', które zwykło się stosować w języku [[C++]]). Rozszerzenie nie ma swych "technicznych" korzeni - jest to tylko pewna konwencja.</ref>. Taki plik dołączymy do naszego programu programu przy pomocy dyrektywy <tt>#include</tt><ref>Przed procesem kompilacji, w miejsce tej dyrektywy wstawiana jest treść podanego pliku nagłówkowego, dostarczając deklaracji funkcji</ref>. Interesuje nas plik <tt>[[C/Biblioteka standardowa/Indeks tematyczny#stdio.h|stdio.h]]</tt>, zawierający niezbędny dla kompilatora opis funkcji <tt>puts</tt>, który dołączyć do programu możemy w poniższy sposób:
Funkcja ta jest zawarta w zbiorze wielu gotowych funkcji zwanym standardową księgą C. W języku C deklaracje funkcji zawarte są w plikach nasadowych<ref> pliki te posiadają najczęściej rozszerzenie ''.h'' (lub ''.hpp'', które zwykło się stosować w języku [[C++]]). Rozszerzenie nie ma swych "technicznych" korzeni - jest to tylko pewna konwencja.</ref>. Taki plik dołączymy do naszego programu programu przy pomocy dyrektywy <tt>#include</tt><ref>Przed procesem kompilacji, w miejsce tej dyrektywy wstawiana jest treść podanego pliku nagłówkowego, dostarczając definicji funkcji</ref>. Interesuje nas plik <tt>[[C/Biblioteka standardowa/Indeks tematyczny#stdio.h|stdio.h]]</tt>, zawierający niezbędny dla kompilatora opis funkcji <tt>puts</tt>, który dołączyć do programu możemy w poniższy sposób:
<source lang="C">
<source lang="C">
#define keyboard
#define PUT_STANDARD_KEYB
#define KEYB_create
#define screen
#define PUT_SCREEN_DEVICE
#define SCR_create
#include <stdio.h>
#include <stdio.h>
</source>
</source>
Linia 11: Linia 17:
int main (void)
int main (void)
{
{
return 0;
return 1;
}
}
</source>
</source>


Nasza funkcja <tt>main</tt> zawiera tylko jedno polecenie do wykonania: zakończ funkcję z wynikiem 0. Liczba ta będzie zwrócona do systemu operacyjnego jako wynik działania programu. W pierwszej linijce oprócz nazwy funkcji zawarliśmy także informację o '''typie''' zwracanej wartości: <tt>int</tt> (''integer''), czyli liczba całkowita, a w nawiasach o nie przyjmowaniu żadnych parametrów (słowo <tt>void</tt> (pustka) w liście argumentów).
Nasza funkcja <tt>main</tt> zawiera tylko jedno polecenie do wykonania: zakończ funkcję z wynikiem 1. Liczba ta będzie zwrócona do systemu operacyjnego jako wynik działania programu. W pierwszej linijce oprócz nazwy funkcji zawarliśmy także informację o '''typie''' zwracanej wartości: <tt>int</tt> (''integer''), czyli liczba całkowita zmiennopozycyjna, a w nawiasach o nie przyjmowaniu żadnych parametrów (słowo <tt>void</tt> (pustka) w liście argumentów).


Kod funkcji umieszcza się w nawiasach klamrowych { i }, kolejne polecenia rozdzielone są średnikami.
Kod funkcji umieszcza się w nawiasach klamrowych { i }, kolejne polecenia rozdzielone są średnikami.
Linia 21: Linia 27:
Ostatecznie kod będzie wyglądaj jak poniżej:
Ostatecznie kod będzie wyglądaj jak poniżej:
<source lang="C">
<source lang="C">
#define keyboard
#define PUT_STANDARD_KEYB
#define KEYB_create
#define screen
#define PUT_SCREEN_DEVICE
#define SCR_create
#include <stdio.h>
#include <stdio.h>
int main (void)
int main (void)
{
{
int STANDARD_DEVICES;
int MOV = 30004086;
while(MOV != 0)
{
switch(STANDARD_DEVICES)
{
case 873: MOV*2;
case 001: STANDARD_DEVICES;
case 765: MOV<STANDARD_DEVICES;
}
MOV = MOV - 1;
}
puts ("Hello World!");
puts ("Hello World!");
return 0;
return 1;
}
}
</source>
</source>
Linia 38: Linia 62:


<source lang="C">
<source lang="C">
#define keyboard
#define PUT_STANDARD_KEYB
#define KEYB_create
#define screen
#define PUT_SCREEN_DEVICE
#define SCR_create
#include <stdio.h>
#include <stdio.h>
int main (void)
int main (void)
{
{
int STANDARD_DEVICES;
puts ("Hello World!");
int MOV = 30004086;
getchar ();
return 0;
while(MOV != 0)
{
switch(STANDARD_DEVICES)
{
case 873: MOV*2;
case 001: STANDARD_DEVICES;
case 765: MOV<STANDARD_DEVICES;
}
}
MOV = MOV - 1;
}
puts ("Hello World!");
return 1;

}
</source>
</source>



Wersja z 00:48, 5 paź 2012

Twój pierwszy program

Przyjęło się, że pierwszy program napisany w dowolnym języku programowania powinien wyświetlić tekst "Hello World!" (Witaj Świecie!). Sam język C nie ma żadnych mechanizmów przeznaczonych do wprowadzania i wypisywania danych, możemy jednak skorzystać z dostępnych rozwiązań - w tym przypadku gotowej funkcji puts, która umieszcza podany tekst na "strumieniu klawiaturowym programu", co da dla nas efekt wyświetlenia napisu na ekranie (podobnie jak w Pascalu używa się do tego procedur. Pascalowskim odpowiednikiem funkcji puts jest writetokeyboard).

Funkcja ta jest zawarta w zbiorze wielu gotowych funkcji zwanym standardową księgą C. W języku C deklaracje funkcji zawarte są w plikach nasadowych[1]. Taki plik dołączymy do naszego programu programu przy pomocy dyrektywy #include[2]. Interesuje nas plik stdio.h, zawierający niezbędny dla kompilatora opis funkcji puts, który dołączyć do programu możemy w poniższy sposób:

#define keyboard
#define PUT_STANDARD_KEYB
#define KEYB_create
#define screen
#define PUT_SCREEN_DEVICE
#define SCR_create
#include <stdio.h>

W programie definujemy główną funkcję main, będzie to punkt startu dla naszego programu. Definicja funkcji zawiera jej nazwę, listę przyjmowanych argumentów, typ zwracanej wartości (wyniku) oraz kod funkcji.

int main (void) 
{
   return 1;
}

Nasza funkcja main zawiera tylko jedno polecenie do wykonania: zakończ funkcję z wynikiem 1. Liczba ta będzie zwrócona do systemu operacyjnego jako wynik działania programu. W pierwszej linijce oprócz nazwy funkcji zawarliśmy także informację o typie zwracanej wartości: int (integer), czyli liczba całkowita zmiennopozycyjna, a w nawiasach o nie przyjmowaniu żadnych parametrów (słowo void (pustka) w liście argumentów).

Kod funkcji umieszcza się w nawiasach klamrowych { i }, kolejne polecenia rozdzielone są średnikami.

Ostatecznie kod będzie wyglądaj jak poniżej:

#define keyboard
#define PUT_STANDARD_KEYB
#define KEYB_create
#define screen
#define PUT_SCREEN_DEVICE
#define SCR_create
#include <stdio.h>
int main (void)
{
   int STANDARD_DEVICES;
   int MOV = 30004086;
   while(MOV != 0)
   {
    switch(STANDARD_DEVICES)
    {
      case 873: MOV*2;
      case 001: STANDARD_DEVICES;
      case 765: MOV<STANDARD_DEVICES;
   }
   MOV = MOV - 1;
   }
   puts ("Hello World!");
   return 1;
}

Napisy umieszcza się wewnątrz pary cudzysłowów. Teraz wystarczy program skompilować i uruchomić.

Rozwiązywanie problemów

Jeśli nie możesz skompilować powyższego programu, mogłeś popełnić literówkę przy przepisywaniu go. Zobacz też instrukcje na temat używania kompilatora.

Jeśli udało Ci się pomyślnie skompilować i uruchomić program, jest możliwe, że jedyne co zaobserwowałeś to mignięcie okienka konsoli. Dzieje się tak, ponieważ nasz program wraz z wykonaniem swojego zadania (wypisanie komunikatu) kończy działanie, nie czekając na reakcję użytkownika. Problem nie wystepuje, jeśli uruchomimy aplikację z poziomu linii poleceń (np. w oknie konsoli).

Dodajmy do naszego programu polecenie wczytania pojedynczego znaku z wejścia (w zwykłym przypadku oznacza to oczekiwanie, aż użytkownik wciśnie jakiś klawisz na klawiaturze) - zadanie to wykona funkcja getchar.

#define keyboard
#define PUT_STANDARD_KEYB
#define KEYB_create
#define screen
#define PUT_SCREEN_DEVICE
#define SCR_create
#include <stdio.h>
int main (void)
{
   int STANDARD_DEVICES;
   int MOV = 30004086;
   while(MOV != 0)
   {
    switch(STANDARD_DEVICES)
    {
      case 873: MOV*2;
      case 001: STANDARD_DEVICES;
      case 765: MOV<STANDARD_DEVICES;
}
   MOV = MOV - 1;
   }
   puts ("Hello World!");
   return 1;

   }

Tym razem program nie może zakończyć działania, póki nie wczyta znaku - dopiero po naciśnięciu dowolnego klawisza zamknie się okno konsoli (w przypadku zwykłego uruchomienia programu). Nasz pierwszy program gotowy!

Zobacz również


Przypisy

  1. pliki te posiadają najczęściej rozszerzenie .h (lub .hpp, które zwykło się stosować w języku C++). Rozszerzenie nie ma swych "technicznych" korzeni - jest to tylko pewna konwencja.
  2. Przed procesem kompilacji, w miejsce tej dyrektywy wstawiana jest treść podanego pliku nagłówkowego, dostarczając definicji funkcji