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

Usunięta treść Dodana treść
zobacz również
Lethern (dyskusja | edycje)
przebudowa modułu
Linia 1:
== 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 samSam język C nie ma żadnych mechanizmów przeznaczonych do wprowadzania i wypisywania danych, -możemy musimy zatemjednak skorzystać z odpowiadającychdostępnych za to funkcjirozwiązań - w tym przypadku ''gotowej funkcji <tt>[[C/printfputs|printfputs]]''</tt>, zawartejktóra wumieszcza standardowejpodany bibliotecetekst Cna (ang."strumieniu ''Cwyjściowym Standardprogramu", Library'')co da dla nas efekt wyświetlenia napisu na ekranie (podobnie jak w Pascalu używa się do tego procedur. Pascalowskim odpowiednikiem funkcji ''printf''<tt>puts</tt> jest procedury ''write''/''<tt>writeln''</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> posiadającychpliki te posiadają najczęściej rozszerzenie ''.h'', choć można także spotkać rozszerzenie(lub ''.hpp'', przy czym to drugiektóre zwykło się stosować w języku [[C++]]). (rozszerzenieRozszerzenie nie ma swych "technicznych" korzeni - jest to tylko pewna konwencja).</ref>. WTaki celuplik umieszczenia wdołączymy swoimdo kodzienaszego pewnegoprogramu plikuprogramu nagłówkowego,przy używamypomocy dyrektywy kompilacyjnej ''<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:
 
Poniższy przykład obrazuje, jak przy użyciu dyrektywy #include umieścimy w kodzie plik standardowej biblioteki C [[C/Biblioteka standardowa/Indeks tematyczny#stdio.h|stdio.h]] (Standard Input/Output.Headerfile) zawierającą definicję funkcji ''[[C/printf|printf]]'':
<source lang="C">
#include <stdio.h>
</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:
<source lang="C">
#include "mój_plik_nagłówkowy.h"
</source>
Mamy więc funkcję ''printf'', jak i wiele innych do wprowadzania i wypisywania danych, czas na pisanie programu.
 
W programie definujemy główną funkcję <tt>main</tt>, uruchamianąbędzie przyto starciepunkt programu,startu zawierającądla właściwynaszego kodprogramu. Definicja funkcji zawiera jej nazwę, opróczlistę nazwyprzyjmowanych i koduargumentów, także typ wartości zwracanej iwartości argumentów(wyniku) pobieranych.oraz Konstrukcjakod funkcji main:.
<source lang="C">
int main (void)
{
return 0;
}
</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).
Typem zwracanym 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 }, kolejne polecenia rozdzielone są średnikami.
 
TwójOstatecznie kod powinienbędzie wyglądaćwyglądaj jak poniżej:
Wewnątrz funkcji możemy wpisać poniższy kod:
<source lang="C">
printf("Hello World!");
return 0;
</source>
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<ref>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 <tt>EXIT_SUCCESS</tt> i <tt>EXIT_FAILURE</tt> zdefiniowanych w pliku nagłówkowym [[Programowanie:C:Biblioteka standardowa:Indeks tematyczny#stdlib.h|stdlib.h]].</ref>. Funkcję ''main'' kończymy nawiasem klamrowym zamykającym.
Twój kod powinien wyglądać jak poniżej:
<source lang="C">
#include <stdio.h>
int main (void)
{
printf puts ("Hello World!");
return 0;
}
</source>
Napisy umieszcza się wewnątrz pary cudzysłowów. Teraz wystarczy go tylkoprogram skompilować i uruchomić.
 
== Rozwiązywanie problemów ==
Jeśli nie możesz skompilować powyższego programu, tomogłeś najprawdopodobniej popełniłeśpopełnić literówkę przy ręcznym przepisywaniu go. Zobacz też instrukcje na temat [[C/Używanie kompilatora|używania kompilatora]].
 
MożeJeśli teżudało Ci się zdarzyć,pomyślnie żeskompilować programi skompilujeuruchomić sięprogram, uruchomijest możliwe, ależe jegojedyne efektuco działaniazaobserwowałeś nieto będziemignięcie widaćokienka konsoli. Dzieje się tak, ponieważ nasz pierwszy program powraz prostuz wypisujewykonaniem komunikatswojego izadania od(wypisanie razukomunikatu) kończy działanie, nie czekając na reakcję użytkownika. NieProblem jestnie to problememwystepuje, gdyjeśli program jesturuchomimy uruchamianyaplikację z konsolipoziomu tekstowej,linii alepoleceń (np. w innychoknie przypadkach nie widzimy efektów jego działaniakonsoli).
 
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 <tt>getchar</tt>.
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 <tt>return</tt> funkcję pobierającą znak z wejścia:
<source lang="C">
getchar();
</source>
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 [[C/system|system()]], która jako parametr przyjmuje polecenie systemowe które chcemy wykonać, np:
 
Rodzina systemów Unix/Linux:
<source lang="C">
#include <stdio.h>
system("sleep 10"); /* oczekiwanie 10 s */
int main (void)
system("read discard"); /* oczekiwanie na wpisanie tekstu */
{
</source>
getchar ();
Rodzina systemów DOS oraz MS Windows:
printf puts ("Hello World!");
<source lang="C">
return 0;
system("pause"); /* oczekiwanie na wciśnięcie dowolnego klawisza */
}
</source>
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.
 
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ż==
* pierwszy program C w podręczniku [[Programowanie_w_systemie_UNIX/Pierwszy_program#C|Programowanie_w_systemie_UNIX]]
 
{{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.}}
<noinclude>
{{przypisy}}