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

Z Wikibooks, biblioteki wolnych podręczników.
< C
Usunięta treść Dodana treść
Lethern (dyskusja | edycje)
revert - to nie Wikipedia, a podręcznik, "zobacz też" na str głównej
Derbeth (dyskusja | edycje)
m dr.
Linia 8: Linia 8:
#include <stdio.h>
#include <stdio.h>
</source>
</source>
W nawiasach trójkątnych < > umieszcza się nazwy standardowych plików nagłówkowych. <ref>Domyślne pliki nagłówkowe znajdują się w katalogu z plikami nagłówkowymi kompilatora. W systemach z rodziny Unix będzie to katalog /usr/include, natomiast w systemie Windows ów katalog będzie umieszczony w katalogu z kompilatorem.</ref> Żeby włączyć inny plik nagłówkowy (np. własny), znajdujący się w katalogu z kodem programu, trzeba go wpisać w cudzysłów:
W nawiasach trójkątnych < > umieszcza się nazwy standardowych plików nagłówkowych<ref>Domyślne pliki nagłówkowe znajdują się w katalogu z plikami nagłówkowymi kompilatora. W systemach z rodziny Unix będzie to katalog /usr/include, natomiast w systemie Windows ów katalog będzie umieszczony w katalogu z kompilatorem.</ref>. Żeby włączyć inny plik nagłówkowy (np. własny), znajdujący się w katalogu z kodem programu, trzeba go wpisać w cudzysłów:
<source lang="C">
<source lang="C">
#include "mój_plik_nagłówkowy.h"
#include "mój_plik_nagłówkowy.h"
Linia 21: Linia 21:
</source>
</source>


Typem zwracany przez funkcję jest ''int'' (''Integer''), czyli liczba całkowita (w przypadku ''main'' będzie to kod wyjściowy programu). W nawiasach umieszczane są ''argumenty'' funkcji, tutaj zapis ''void'' oznacza ich pominięcie Funkcja Main jako argumenty może pobierać parametry linii polecenia, z jakimi program został uruchomiony i pełną ścieżkę do katalogu z programem)
Typem zwracany przez funkcję jest ''int'' (''Integer''), czyli liczba całkowita (w przypadku ''main'' będzie to kod wyjściowy programu). W nawiasach umieszczane są ''argumenty'' funkcji, tutaj zapis ''void'' oznacza ich pominięcie. Funkcja ''main'' jako argumenty może pobierać parametry linii poleceń, z jakimi program został uruchomiony, i pełną ścieżkę do katalogu z programem.


Kod funkcji umieszcza się w nawiasach klamrowych { i }.
Kod funkcji umieszcza się w nawiasach klamrowych { i }.

Wersja z 23:34, 13 lis 2010

Twój pierwszy program

Przyjęło się, że pierwszy program napisany w dowolnym języku programowania, powinien wyświetlić tekst "Hello World!" (Witaj Świecie!). Zauważ, że sam język C nie ma żadnych mechanizmów przeznaczonych do wprowadzania i wypisywania danych - musimy zatem skorzystać z odpowiadających za to funkcji - w tym przypadku printf, zawartej w standardowej bibliotece C (ang. C Standard Library) (podobnie jak w Pascalu używa się do tego procedur. Pascalowskim odpowiednikiem funkcji printf są procedury write/writeln).

W języku C deklaracje funkcji zawarte są w plikach nagłówkowych posiadających najczęściej rozszerzenie .h, choć można także spotkać rozszerzenie .hpp, przy czym to drugie zwykło się stosować w języku C++ (rozszerzenie nie ma swych "technicznych" korzeni - jest to tylko pewna konwencja). W celu umieszczenia w swoim kodzie pewnego pliku nagłówkowego, używamy dyrektywy kompilacyjnej #include. Przed procesem kompilacji, w miejsce tej dyrektywy wstawiana jest treść podanego pliku nagłówkowego, dostarczając deklaracji funkcji.

Poniższy przykład obrazuje, jak przy użyciu dyrektywy #include umieścimy w kodzie plik standardowej biblioteki C stdio.h (Standard Input/Output.Headerfile) zawierającą definicję funkcji printf:

#include <stdio.h>

W nawiasach trójkątnych < > umieszcza się nazwy standardowych plików nagłówkowych[1]. Żeby włączyć inny plik nagłówkowy (np. własny), znajdujący się w katalogu z kodem programu, trzeba go wpisać w cudzysłów:

#include "mój_plik_nagłówkowy.h"

Mamy więc funkcję printf, jak i wiele innych do wprowadzania i wypisywania danych, czas na pisanie programu.

W programie definujemy główną funkcję main, uruchamianą przy starcie programu, zawierającą właściwy kod. Definicja funkcji zawiera, oprócz nazwy i kodu, także typ wartości zwracanej i argumentów pobieranych. Konstrukcja funkcji main:

int main (void) 
{
}

Typem zwracany przez funkcję jest int (Integer), czyli liczba całkowita (w przypadku main będzie to kod wyjściowy programu). W nawiasach umieszczane są argumenty funkcji, tutaj zapis void oznacza ich pominięcie. Funkcja main jako argumenty może pobierać parametry linii poleceń, z jakimi program został uruchomiony, i pełną ścieżkę do katalogu z programem.

Kod funkcji umieszcza się w nawiasach klamrowych { i }.

Wewnątrz funkcji możemy wpisać poniższy kod:

printf("Hello World!");
return 0;

Wszystkie polecenia kończymy średnikiem. return 0; określa wartość jaką zwróci funkcja (program); Liczba zero zwracana przez funkcję main() oznacza, że program zakończył się bez błędów; błędne zakończenie często (choć nie zawsze) określane jest przez liczbę jeden[2]. Funkcję main kończymy nawiasem klamrowym zamykającym.

Twój kod powinien wyglądać jak poniżej:

#include <stdio.h>
int main (void)
{
 printf ("Hello World!");
 return 0;
}

Teraz wystarczy go tylko skompilować i uruchomić.

Rozwiązywanie problemów

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

Może też się zdarzyć, że program skompiluje się, uruchomi, ale jego efektu działania nie będzie widać. Dzieje się tak, ponieważ nasz pierwszy program po prostu wypisuje komunikat i od razu kończy działanie, nie czekając na reakcję użytkownika. Nie jest to problemem, gdy program jest uruchamiany z konsoli tekstowej, ale w innych przypadkach nie widzimy efektów jego działania.

Jeśli korzystasz ze Zintegrowanego Środowiska Programistycznego (ang. IDE), możesz zaznaczyć, by nie zamykało ono programu po zakończeniu jego działania. Innym sposobem jest dodanie instrukcji, które wstrzymywałyby zakończenie programu. Można to zrobić dodając przed linią z return funkcję pobierającą znak z wejścia:

getchar();

Jest też prostszy (choć nieprzenośny) sposób, mianowicie wywołanie polecenia systemowego. W zależności od używanego systemu operacyjnego mamy do dyspozycji różne polecenia powodujące różne efekty. Do tego celu skorzystamy z funkcji system(), która jako parametr przyjmuje polecenie systemowe które chcemy wykonać, np:

Rodzina systemów Unix/Linux:

system("sleep 10"); /* oczekiwanie 10 s */
system("read discard"); /* oczekiwanie na wpisanie tekstu */

Rodzina systemów DOS oraz MS Windows:

system("pause"); /* oczekiwanie na wciśnięcie dowolnego klawisza */

Funkcja ta jest o wiele bardziej pomocna w systemach operacyjnych Windows w których to z reguły pracuje się w trybie okienkowym a z konsoli korzystamy tylko podczas uruchamianiu programu. Z kolei w systemach Unix/Linux jest ona praktycznie w ogóle nie używana w tym celu, ze względu na uruchamianie programu bezpośrednio z konsoli.

Przypisy

  1. Domyślne pliki nagłówkowe znajdują się w katalogu z plikami nagłówkowymi kompilatora. W systemach z rodziny Unix będzie to katalog /usr/include, natomiast w systemie Windows ów katalog będzie umieszczony w katalogu z kompilatorem.
  2. Jeżeli chcesz mieć pewność, że twój program będzie działał poprawnie również na platformach, gdzie 1 oznacza poprawne zakończenie (lub nie oznacza nic), możesz skorzystać z makr EXIT_SUCCESS i EXIT_FAILURE zdefiniowanych w pliku nagłówkowym stdlib.h.