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

Z Wikibooks, biblioteki wolnych podręczników.
< C
Usunięta treść Dodana treść
Kj (dyskusja | edycje)
m język...
Linia 66: Linia 66:
system("pause"); /* oczekiwanie na wciśnięcie dowolnego klawisza */
system("pause"); /* oczekiwanie na wciśnięcie dowolnego klawisza */
</source>
</source>
Funkcja ta jest o wiele bardziej pomocna w systemach operacyjnych Windows w których to z reguł 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.
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.


{{infobox|Niektóre podręczniki używają zamiast funkcji getchar() funkcję getch(), jest ona jednak niezgodna ze standardem definiującym C oraz zależy od wielu czynników, takich jak: system operacyjny i dostępność niektórych bibliotek. Dlatego też nie zalecamy jej używania.}}
{{infobox|Niektóre podręczniki używają zamiast funkcji getchar() funkcję getch(), jest ona jednak niezgodna ze standardem definiującym C oraz zależy od wielu czynników, takich jak: system operacyjny i dostępność niektórych bibliotek. Dlatego też nie zalecamy jej używania.}}

Wersja z 12:53, 21 lut 2009

Twój pierwszy program

Przyjęło się, że pierwszy program napisany w dowolnym języku programowania, powinien wyświetlić tekst np. "Hello World!" (Witaj Świecie!). Zauważ, że sam język C nie ma żadnych mechanizmów przeznaczonych do wprowadzania i wypisywania danych - musimy zatem skorzystać ze specjalnie napisanych w tym celu 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). Żeby włączyć plik nagłówkowy do swojego kodu, trzeba użyć dyrektywy kompilacyjnej #include. Ta dyrektywa powoduje, że przed procesem kompilacji danego pliku źródłowego, deklaracje funkcji z pliku nagłówkowego zostają dołączone do twojego kodu celem zweryfikowania poprawności wywoływanych funkcji.

Poniżej przykład, jak użyć dyrektywy #include żeby wkleić definicję funkcji printf z pliku nagłówkowego stdio.h (Standard Input/Output.Headerfile):

#include <stdio.h>

W nawiasach trójkątnych < > umieszcza się nazwy standardowych plików nagłówkowych. Ż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. [1]

Programy w C zaczyna się funkcją main, w której umieszcza się właściwy kod programu. Żeby rozpocząć tę funkcję, należy wpisać:

int main (void) 
{

int oznacza, że funkcja zwróci (tzn. przyjmie wartość po zakończeniu) liczbę całkowitą - w przypadku main będzie to kod wyjściowy programu; main to nazwa funkcji, w nawiasach umieszczamy parametry programu. Na tym etapie parametry programu nie będą nam potrzebne (void oznacza brak parametrów). Używa się ich do odczytywania argumentów linii polecenia, z jakimi program został uruchomiony.

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

Wewnątrz funkcji należy 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 kod (wraz z okalającymi klamrami):

{
 int chr;
 puts("Wcisnij ENTER...");
 while ((chr = getchar())!=EOF && chr!='\n');
}

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.