C/Pierwszy program: Różnice pomiędzy wersjami
m →Błędy przy uruchamianiu: link wewn |
→Błędy przy uruchamianiu: przeniesienie do strony błędu |
||
Linia 40: | Linia 40: | ||
./a.out |
./a.out |
||
===Błędy przy uruchamianiu=== |
|||
Błędy przy uruchamianiu programu ( = błędy wykonania , ang. run-time errors ) |
|||
* Naruszenie ochrony pamięci ( ang. Segmentation fault) mogą być spowodowane przez :<ref>[[w:Naruszenie ochrony pamięci| wikipedia : Naruszenie ochrony pamięci]]</ref> |
|||
** przepełnieniem stosu ( ang. stack overflow ) <ref>[http://students.mimuw.edu.pl/SO/Projekt04-05/temat5-g2/kulewski/pax.html W Sikora-Kobyliński, M Czępiński, G Kulewski : Ostatnia linia obrony przed atakiem ]</ref> |
|||
** dostęp do tablicy z użyciem indeksu poza jego zakresem ( Index > IndexMax ) |
|||
** użycie scanf("%d", x); zamiast scanf("%d", &x);<ref>[http://www.faqs.org/qa/qa-673.html ...definition of "Segmentation Fault" - Where is...]</ref> |
|||
* [[C/Wskaźniki#Popularne_b.C5.82.C4.99dy|Błedy z użyciem wskaźników]] |
|||
== Rozwiązywanie problemów == |
== Rozwiązywanie problemów == |
Wersja z 12:47, 7 sty 2014
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 wyjściowym programu", co da nam efekt wyświetlenia napisu na ekranie (podobnie jak w Pascalu używa się do tego procedur. Pascalowskim odpowiednikiem funkcji puts jest writeln).
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[1]. Taki plik dołączymy do naszego 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:
#include <stdio.h>
W programie definiujemy 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 0;
}
Nasza funkcja main 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: int (integer), czyli liczba całkowita, 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ądał jak poniżej:
#include <stdio.h>
int main (void)
{
puts ("Hello World!");
return 0;
}
Napisy umieszcza się wewnątrz pary cudzysłowów. Teraz wystarczy program skompilować i uruchomić.
Kompilacja programu
Uruchomienie programu
Linux
Jeśli nie nadaliśmy innej nazwy przy kompilacji to standardowe wpisujemy w konsoli :
./a.out
Rozwiązywanie problemów
Jeśli nie możesz skompilować powyższego programu, mogłeś popełnić literówkę przy przepisywaniu go. Więcej informacji o kompilacji tutaj.
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 występuje, 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.
#include <stdio.h>
int main (void)
{
puts ("Hello World!");
getchar ();
return 0;
}
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
Przypisy
- ↑ 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.
- ↑ Przed procesem kompilacji, w miejsce tej dyrektywy wstawiana jest treść podanego pliku nagłówkowego, dostarczając deklaracji funkcji