<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=TI%2FW%C5%82%C4%85czanie_kodu_w_innych_j%C4%99zykach%2FJ%C4%99zyki_kompilowalne</id>
	<title>TI/Włączanie kodu w innych językach/Języki kompilowalne - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=TI%2FW%C5%82%C4%85czanie_kodu_w_innych_j%C4%99zykach%2FJ%C4%99zyki_kompilowalne"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/W%C5%82%C4%85czanie_kodu_w_innych_j%C4%99zykach/J%C4%99zyki_kompilowalne&amp;action=history"/>
	<updated>2026-05-03T19:47:55Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=TI/W%C5%82%C4%85czanie_kodu_w_innych_j%C4%99zykach/J%C4%99zyki_kompilowalne&amp;diff=1970&amp;oldid=prev</id>
		<title>Jarekz: Utworzono nową stronę &quot; == Język interpretowany vs język kompilowany ==  Do tej pory pisaliście w pythonie. Jest to język interpretowany. To znaczy wyglądało to tak, że tworzyliście pl...&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=TI/W%C5%82%C4%85czanie_kodu_w_innych_j%C4%99zykach/J%C4%99zyki_kompilowalne&amp;diff=1970&amp;oldid=prev"/>
		<updated>2015-05-23T14:06:13Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot; == Język interpretowany vs język kompilowany ==  Do tej pory pisaliście w pythonie. Jest to język interpretowany. To znaczy wyglądało to tak, że tworzyliście pl...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
== Język interpretowany vs język kompilowany ==&lt;br /&gt;
&lt;br /&gt;
Do tej pory pisaliście w pythonie. Jest to język interpretowany. To znaczy wyglądało to tak, że tworzyliście plik tekstowy, zgodnie z określonymi regułami, w którym zapisywaliście kod źródłowy programu. Gdy chcieliście wykonać program, wywoływaliście interpreter pythona podając mu wasz kod źródłowy w postaci tekstowej:&lt;br /&gt;
:&amp;lt;tt&amp;gt;python moj_program.py&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W językach kompilowanych (np. &amp;lt;tt&amp;gt;C&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;C++&amp;lt;/tt&amp;gt;) po utworzeniu kodu źródłowego uruchamia się program zwany kompilatorem, który w przeciwieństwie do interpretera, nie wykonuje od razu programu, jedynie tworzy&lt;br /&gt;
plik z kodem maszynowym. Np.:&lt;br /&gt;
:&amp;lt;tt&amp;gt;gcc program.c -o program&amp;lt;/tt&amp;gt;&lt;br /&gt;
utworzy z naszego kodu źródłowego program.c kod maszynowy program.&lt;br /&gt;
Dopiero ten plik jest wykonywalnym programem, zależnym od architektury komputera na którym został utworzony &amp;amp;mdash; jest to kod maszynowy zrozumiały dla danej maszyny. Kompilację wystarczy wykonać raz, i nie potrzeba już źródeł do uruchamiania programu wykonywalnego. Jednakże po każdej zmianie kodu źródłowego program należy skompilować jeszcze raz. W przeciwnym razie zmiany te nie zostaną uwzględnione w działaniu programu.&lt;br /&gt;
&lt;br /&gt;
==Program podstawowy==&lt;br /&gt;
&lt;br /&gt;
W podstawowym programie musimy mieć funkcję główną &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt; (oraz biblioteki), która zostaje automatycznie wywołana przy uruchomieniu programu.&lt;br /&gt;
Składnia funkcji main:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char *argv[], char *envp[])&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
….&lt;br /&gt;
&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
My będziemy korzystać z takiej:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
….&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja main jest funkcją zwracającą wartość typu całkowitego (int przed main). Przy wywołaniu programu przekazywane są jej następujące argumenty: &amp;lt;tt&amp;gt;argc&amp;lt;/tt&amp;gt; (typu całkowitego) &amp;amp;mdash; całkowita liczba przekazanych parametrów oraz tablica typu znakowego (&amp;lt;tt&amp;gt;char *argv[]&amp;lt;/tt&amp;gt;), w której zapisane są agrumenty jako napisy (stringi).&lt;br /&gt;
&lt;br /&gt;
Tablice w &amp;lt;tt&amp;gt;C++&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;C&amp;lt;/tt&amp;gt;, numerowane są od 0 do n-1. Pierwszy argument przekazywany funkcji &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt;, czyli &amp;lt;tt&amp;gt;argv[0]&amp;lt;/tt&amp;gt;, to nazwa samego programu. &amp;lt;tt&amp;gt;argv[argc-1]&amp;lt;/tt&amp;gt; jest ostatnim slowem, ktore wpiszesz, wywolujac program.&lt;br /&gt;
&lt;br /&gt;
Program, jeżeli wykona się poprawnie powinien zwrócić wartość 0 (zaszłości historyczne).&lt;br /&gt;
===Pierwszy program w &amp;lt;tt&amp;gt;C++&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Standardowo pierwszym naszym programem będzie wypisanie &amp;quot;hello world!&amp;quot;. Jak to zrobimy w &amp;lt;tt&amp;gt;C++&amp;lt;/tt&amp;gt;?&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    cout&amp;lt;&amp;lt;&amp;quot;Hello world&amp;quot;&amp;lt;&amp;lt;endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Linijka po linijce:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	Włączamy nagłówek biblioteki standardowej, której m.in. znajdują&lt;br /&gt;
sie polecenia wypisania na ekran.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	Piszemy, że będziemy korzystać z globalnych klas, funkcji i&lt;br /&gt;
obiektów, zdefiniowanych w bibliotekach (włączonych).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	Rozpoczynamy funkcję główną — nasz program. Każdy program, żeby&lt;br /&gt;
działać musi mieć funkcję główną. Można tez definiować inne funkcje&lt;br /&gt;
— będziemy to robić na kolejnych zajęciach. W najprostszym wypadku&lt;br /&gt;
nagłówek funkcji main wygląda tak: &amp;lt;tt&amp;gt;int main()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	Otwieramy ciało funkcji głównej &amp;lt;tt&amp;gt;{&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	Wypisujemy na standardowe wyjście napis &amp;lt;tt&amp;gt;Hello world&amp;lt;/tt&amp;gt; i&lt;br /&gt;
przechodzimy do następnej linijki poleceniem &amp;lt;tt&amp;gt;endl&amp;lt;/tt&amp;gt;. Moglibyśmy&lt;br /&gt;
też napisać &amp;lt;tt&amp;gt;cout &amp;lt;&amp;lt; &amp;quot;Hello world\n&amp;quot;;&amp;lt;/tt&amp;gt; &amp;lt;tt&amp;gt;&amp;quot;\n&amp;quot;&amp;lt;/tt&amp;gt; jest&lt;br /&gt;
tzw. znakiem specjalnym.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	Funkcja główna jest funkcją zwracająca liczbę całkowitą. Standardowo (jeżeli program się wykonał poprawnie) zwracamy 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	Zamykamy ciało funkcji głownej &amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
===Pierwszy program w &amp;lt;tt&amp;gt;C&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Standardowo pierwszym naszym programem będzie wypisanie &amp;quot;hello world!&amp;quot;. Jak to zrobimy w &amp;lt;tt&amp;gt;C++&amp;lt;/tt&amp;gt;?&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
    print(&amp;quot;Hello world!\n&amp;quot;)&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Linijka po linijce:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	Włączamy nagłówek biblioteki standardowej, której m.in. znajdują&lt;br /&gt;
sie polecenia wypisania na ekran.&lt;br /&gt;
 	&amp;lt;li&amp;gt;&lt;br /&gt;
	Rozpoczynamy funkcję główną — nasz program. Każdy program, żeby&lt;br /&gt;
działać musi mieć funkcję główną. Można tez definiować inne funkcje&lt;br /&gt;
— będziemy to robić na kolejnych zajęciach. W najprostszym wypadku&lt;br /&gt;
nagłówek funkcji main wygląda tak: &amp;lt;tt&amp;gt;int main()&amp;lt;/tt&amp;gt;.&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	Otwieramy ciało funkcji głównej &amp;lt;tt&amp;gt;{&amp;lt;/tt&amp;gt;.&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	Wypisujemy na standardowe wyjście napis &amp;lt;tt&amp;gt;Hello world&amp;lt;/tt&amp;gt; i&lt;br /&gt;
przechodzimy do następnej linijki poleceniem &amp;lt;tt&amp;gt;\n&amp;lt;/tt&amp;gt;. &lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	Funkcja główna jest funkcją zwracająca liczbę całkowitą. Standardowo (jeżeli program się wykonał poprawnie) zwracamy 0.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
	Zamykamy ciało funkcji głownej &amp;lt;tt&amp;gt;}&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
===Komentarze w tekście programu===&lt;br /&gt;
Zarówno w &amp;lt;tt&amp;gt;C&amp;lt;/tt&amp;gt; jak i &amp;lt;tt&amp;gt;C++&amp;lt;/tt&amp;gt; komentarze jednolinijkowe zaczynają się od podwójnego ukośnika odwrotnego &amp;lt;tt&amp;gt;//&amp;lt;/tt&amp;gt;. Komentarze można też zawrzeć w &amp;lt;tt&amp;gt;/*&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;*/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
===Instrukcja &amp;lt;tt&amp;gt;include&amp;lt;/tt&amp;gt;===&lt;br /&gt;
Pliki nagłówkowe, zarówno systemowe, jak i autorstwa użytkownika, włącza się za pomocą dyrektywy preprocesora &amp;lt;tt&amp;gt;#include&amp;lt;/tt&amp;gt;:&lt;br /&gt;
* &amp;lt;tt&amp;gt;#include &amp;lt;plik&amp;gt;&amp;lt;/tt&amp;gt; używana jest w przypadku systemowych plików nagłówkowych. W tym przypadku plik ''plik'' poszukiwany jest w standardowych katalogach &amp;amp;mdash; zwykle w &amp;lt;tt&amp;gt;/usr/include&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;#include &amp;quot;plik&amp;quot;&amp;lt;/tt&amp;gt; używana jest w przypadku plików nagłówkowych autorstwa użytkownika. Poszukiwane są one na początku w katalogu zawierającym kompilowany program, następnie w katalogach zawartych w cudzysłowach, a następnie w standardowych katalogach, wktórych znajdują się systemowe pliki nagłówkowe. &lt;br /&gt;
&lt;br /&gt;
Nazwa pliku czy w nawiasach trójkątnych, czy w cudzysłowach traktowana jest jako napis. Preprocesor nie rozpoznaje ani znaków wskazujących na rozpoczęcie komentarza (&amp;lt;tt&amp;gt;/*&amp;lt;/tt&amp;gt;) ani ukośników odwrotnych, które są traktowane jako zwykłe znaki, a nie znaki specjalne.&lt;br /&gt;
&lt;br /&gt;
== Szybki wstęp do C dla znających pythona -- różnice i podobieństwa ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Uruchamianie programu ===&lt;br /&gt;
Python jest językiem interpretowanym, a C kompilowanym. Dlatego też program pythonowy wykonujemy podając jako argument komendzie interpretera plik z kodem źródłowym, który jest następnie interpretowany przez interpreter i wykonywany. Programy pythonowe (a jednocześnie piki z kodem pythonowym) mają rozszerzenie .py.&lt;br /&gt;
&lt;br /&gt;
 python moj_program.py&lt;br /&gt;
&lt;br /&gt;
W C plik z kodem źródłowym ma rozszerzenie .c. Aby wykonać program, musimy pier przerobić plik z kodem źródłowym na program -- ciąg bajtów oznaczających instrukcje zrozumiałe już bezpośrednio dla procesora (procesor nie jest w stanie czytać tekstu kodu źródłowego, umie wykonywać proste instrukcje na rejestrach).&lt;br /&gt;
&lt;br /&gt;
 gcc moj_program.c -o moj_program&lt;br /&gt;
 &lt;br /&gt;
A dopiero potem wykonać program. (Po fladze -o podajemy nazwę jaka ma zostać nadana programowi wykonywalnemu. Domyślnie kompilator utworzy program wykonywalny o nazwie a.out)&lt;br /&gt;
&lt;br /&gt;
 ./moj_program&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Struktura programu ===&lt;br /&gt;
&lt;br /&gt;
W programie pythonowym na początku mieliśmy często instrukcje&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
 import modul&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pewnym sensie odpowiednikiem tego w C jest instrukcja:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;modul&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W pythonie do funkcji w modułu odwoływaliśmy się:&lt;br /&gt;
&lt;br /&gt;
 modul.funkcja_z_modulu()&lt;br /&gt;
&lt;br /&gt;
W C możemy się bezpośrednio do nazwy funkcji odwoałać:&lt;br /&gt;
&lt;br /&gt;
 funkcja_z_modułu();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
O ile w pythonie większość rzeczy to była konwencja, czyli importy mogliśmy równie dobrze w środku pliku z kodem wpisać, o tyle w C instrukcje include faktycznie muszą być na początku, inazej kompilator zgłosi błąd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
W programie pythonowym mogliśmy pisać dowolne instrukcje w dowolnym miejscu w pliku -- nie było wymogu definiowania żadnych funkcji itd. W programie w C konieczna jest jedna podstawowa funkcja main (opisana trochę wyżej). Tym co już wykona skompilowany program będize właśnie funkcja main. Na zewnątrz tej funkcji możemy sobie podefiniować inne funkcje, i wykonać jeszcze kilka rzeczy ze ściśle określonej puli, jak deklarowanie zmiennych/typów, ale nie możemy już z taką dowolnością jak w pythonie wpisać pętli for w dowolnym miejscu w pliku.&lt;br /&gt;
&lt;br /&gt;
=== Wcięcia i inne podstawowe drobiazgi składniowe ===&lt;br /&gt;
&lt;br /&gt;
W pythonie do oznaczenia bloku programu znajdującego się na tym samym poziomie używamy wcięć. W C możemy wcięcia robić dowolnie, natomiast zakres bloku oznaczamy klamerkami: {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def jakas_funkcja(): # jest dwukropek, komentarz zaznaczamy poprzez #&lt;br /&gt;
    print &amp;quot;hello world&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int jakas_funkcja() // nie ma dwukropka, &amp;quot;//&amp;quot; to znak komentarza&lt;br /&gt;
{ // blok jest oznaczony nawiasami klamrowi, poniższe wcięcia są tylko dla ładności kodu&lt;br /&gt;
    printf(&amp;quot;Hello world!\n&amp;quot;); // po każdej linijce konieczny jest średnik&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Typy ===&lt;br /&gt;
&lt;br /&gt;
W pythonie nie ma czegoś takiego jak deklaracja zmiennych. Kiedy potrzebujemy zachować sobie w pamięci wynik jakichś operacji, piszemy po prostu:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
x = moja_funkcja()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
nie uprzedzając nikogo wcześniej, że będziemy używać takiej zmiennej jak x.&lt;br /&gt;
&lt;br /&gt;
W C już na początku pisania programu trzeba się zdecydować ile zmiennych będziemy używać i jakiego będą typy.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
int x; //deklaracja zmiennej&lt;br /&gt;
x = moja_funkcja();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podstawowe typy w C:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| int    &lt;br /&gt;
|integer, liczba całkowita zapisana na 32 bitach&lt;br /&gt;
|-&lt;br /&gt;
|short &lt;br /&gt;
|liczba całkowita zapisana na 16 bitach&lt;br /&gt;
|-&lt;br /&gt;
| long   &lt;br /&gt;
| liczba całkowita zapisana na 64 bitach&lt;br /&gt;
|-&lt;br /&gt;
|float  &lt;br /&gt;
|32 bity&lt;br /&gt;
|-&lt;br /&gt;
|double &lt;br /&gt;
|64 bity (python, którego my używamy jest zaimplementowany w C,&amp;lt;br/&amp;gt; w pythonie do implementacji typu float jest użyty typ double z C)&lt;br /&gt;
|-&lt;br /&gt;
|char   &lt;br /&gt;
|character, 1 bajt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Podstawowe operacje w C ===&lt;br /&gt;
&lt;br /&gt;
Takie same jak w pythonie:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| +	&lt;br /&gt;
|dodawanie&lt;br /&gt;
|-&lt;br /&gt;
| -	&lt;br /&gt;
|odejmowanie&lt;br /&gt;
|- &lt;br /&gt;
| *	&lt;br /&gt;
|mnożenie&lt;br /&gt;
|-&lt;br /&gt;
| /	&lt;br /&gt;
|dzielenie&lt;br /&gt;
|-&lt;br /&gt;
| =	&lt;br /&gt;
| operator przypisania wartości&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| 	&amp;lt;		&lt;br /&gt;
|mniejszy &lt;br /&gt;
|-&lt;br /&gt;
|  	&amp;lt;=		&lt;br /&gt;
|mniejszy   równy &lt;br /&gt;
|-&lt;br /&gt;
| 	==		&lt;br /&gt;
|równy &lt;br /&gt;
|-&lt;br /&gt;
| 	!=		&lt;br /&gt;
| różny&lt;br /&gt;
|-&lt;br /&gt;
| 	&amp;gt;=		&lt;br /&gt;
|większy  równy&lt;br /&gt;
|- &lt;br /&gt;
|	&amp;gt;		&lt;br /&gt;
|większy&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Różnice (operatory logiczne):&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!        C              &lt;br /&gt;
!Python&lt;br /&gt;
|- &lt;br /&gt;
|&amp;amp;&amp;amp; 		&lt;br /&gt;
|and&lt;br /&gt;
|-&lt;br /&gt;
|	&amp;amp;brvbar;&amp;amp;brvbar;		&lt;br /&gt;
|or&lt;br /&gt;
|-&lt;br /&gt;
| 	!		&lt;br /&gt;
|not&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Podstawowe konstrukcje: if, while, for ===&lt;br /&gt;
W C nie ma typy True i False -- podajemy 0 lub 1, wyrażenia logiczne ewaluują się do 0 lub 1.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
 if (warunek)&lt;br /&gt;
 { &lt;br /&gt;
 	printf(&amp;quot;True \n&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 else &lt;br /&gt;
 	printf(&amp;quot;False\n&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    int i = initial_i;&lt;br /&gt;
&lt;br /&gt;
    while (i &amp;lt;= i_max)&lt;br /&gt;
    {&lt;br /&gt;
     	// jakieś instrukcje&lt;br /&gt;
&lt;br /&gt;
	i = i + i_increment;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    for (i = initial_i; i &amp;lt;= i_max; i = i + i_increment)&lt;br /&gt;
    {&lt;br /&gt;
	//jakieś instrukcje&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Funkcje ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typ_zwracany nazwa_funkcji(lista_argumentow)&lt;br /&gt;
{&lt;br /&gt;
    //deklaracje zmiennych lokalnych&lt;br /&gt;
&lt;br /&gt;
    //instrukcje&lt;br /&gt;
&lt;br /&gt;
    return cos_typu_zwracanego;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
na przykład:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void fun()&lt;br /&gt;
{&lt;br /&gt;
   printf(&amp;quot;fun&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
int mnozenie(int a, int b)&lt;br /&gt;
{&lt;br /&gt;
    return a * b;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wskaźniki ===&lt;br /&gt;
Oto przykład obrazujący czym są wskaźniki:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
	int zmienna_x;&lt;br /&gt;
        int* wskaznik_na_x;&lt;br /&gt;
&lt;br /&gt;
        zmienna_x = 42;&lt;br /&gt;
	wskaznik_na_x = &amp;amp;zmienna_x;&lt;br /&gt;
        printf(&amp;quot;Wartosc wskaznika: %d, wartosc pod wskaznikiem: %d \n&amp;quot;, wskaznik_na_x, *wskaznik_na_x);&lt;br /&gt;
	*wskaznik_na_x = 0;&lt;br /&gt;
	printf(&amp;quot;wartosc x : %d \n&amp;quot;, zmienna_x);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Przykładowy program ===&lt;br /&gt;
Program pokazujący jak uważnie trzeba korzystać ze wskaźników:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int test_wskaznikow(int a)&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	int zmienna_x;&lt;br /&gt;
        int* wskaznik_na_x;&lt;br /&gt;
&lt;br /&gt;
        zmienna_x = a;&lt;br /&gt;
	wskaznik_na_x = &amp;amp;zmienna_x;&lt;br /&gt;
        printf(&amp;quot;Wartosc wskaznika: %d, wartosc pod wskaznikiem: %d \n&amp;quot;, wskaznik_na_x, *wskaznik_na_x);&lt;br /&gt;
	*wskaznik_na_x = 0;&lt;br /&gt;
	printf(&amp;quot;wartosc x : %d \n&amp;quot;, zmienna_x);&lt;br /&gt;
        return wskaznik_na_x;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(){&lt;br /&gt;
&lt;br /&gt;
int wsk_adres = test_wskaznikow(42);&lt;br /&gt;
printf(&amp;quot;funkcja uzyla miejsca w pamieci o adresie %d \n&amp;quot;, wsk_adres);&lt;br /&gt;
&lt;br /&gt;
return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ten program nie jest napisany do końca prawidłowo, tzn skompiluje się, ale podczas kompilacji dostaniemy tzw. &amp;quot;warningi&amp;quot;, ostrzeżenia, że prawdopodobnie zrobiliśmy coś nie do końca jak należy, ale czysto teoretycznie program w takiej formie mógłby się wykonać:&lt;br /&gt;
&lt;br /&gt;
 user-46-113-227-209:~ magda$ gcc test.c&lt;br /&gt;
 test.c: In function ‘test_wskaznikow’:&lt;br /&gt;
 test.c:13: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘int *’&lt;br /&gt;
 test.c:16: warning: return makes integer from pointer without a cast&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chodzi o to, że odwołujemy się bezpośrednio do wskaźnika traktując do jako liczbę całkowitą.&lt;br /&gt;
Należało by pierw zrzutować go na odpowiedni typ, czyli poprawić następujące linijki:&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;Wartosc wskaznika: %ld , wartosc pod wskaznikiem: %d \n&amp;quot;, (long)wskaznik_na_x, *wskaznik_na_x);&lt;br /&gt;
&lt;br /&gt;
 return (long)wskaznik_na_x;&lt;br /&gt;
&lt;br /&gt;
Zauważmy teraz, że wykonanie programu wciąż wygląda podejrzanie:&lt;br /&gt;
&lt;br /&gt;
 user-46-113-227-209:~ magda$ ./a.out &lt;br /&gt;
 Wartosc wskaznika: 140734799804988 , wartosc pod wskaznikiem: 42 &lt;br /&gt;
 wartosc x : 0 &lt;br /&gt;
 funkcja uzyla miejsca w pamieci o adresie 1606416956 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wewnątrz funkcji wypisywany jest dużo dłuższy adres z pamięciu, niż w funkcji main. Dlaczego tak się dzieje? Wskazówka: zwróć uwagę na to, jakiego typu jest wskaźnik wewnątrz funkcji, a jako jaki typ jest traktowany w funkcji main. Co należałoby poprawić?&lt;br /&gt;
&lt;br /&gt;
=== Zadania ===&lt;br /&gt;
&lt;br /&gt;
==== Silnia ====&lt;br /&gt;
&lt;br /&gt;
Napisz program obliczający silnię zadanej liczby N.&lt;br /&gt;
Zdefiniuj funkcję silnia, a następnie wywołaj ją w funkcji main. W pierwszym podejściu możesz wartość N wpisać &amp;quot;na sztywno&amp;quot; w kodzie. W drugim podejściu spróbuj pobierać ją jako parametr programu.&lt;br /&gt;
&lt;br /&gt;
==kompilacja (courtesy of wikipedia)==&lt;br /&gt;
&lt;br /&gt;
GCC (ang. GNU Compiler Collection) to zestaw kompilatorów do różnych języków programowania rozwijany w ramach projektu GNU i udostępniany na licencji GPL oraz LGPL. GCC jest podstawowym kompilatorem w systemach uniksopodobnych przy czym szczególnie ważną rolę odgrywa w procesie budowy jądra Linuksa. Początkowo skrótowiec GCC oznaczał GNU C Compiler, ponieważ był to kompilator wyłącznie do języka &amp;lt;tt&amp;gt;C&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Standardowo używamy kompilator gcc do kompilacji programów napisanych w &amp;lt;tt&amp;gt;C&amp;lt;/tt&amp;gt; (rozszerzenie pliku c), a &amp;lt;tt&amp;gt;g++&amp;lt;/tt&amp;gt; do kompilacji programów napisanych w &amp;lt;tt&amp;gt;C++&amp;lt;/tt&amp;gt; (rozszerzenie pliku &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Program gcc (wywoływany podczas kompilacji np. z linii poleceń) odpowiada za przetworzenie argumentów, uruchomienie odpowiedniego kompilatora właściwego dla języka programowania w jakim zakodowano plik z kodem źródłowym, wykonanie programu asemblera dla tak otrzymanego wyniku oraz uruchomienie konsolidatora (linkera) w celu uzyskania pliku wykonywalnego. Przykładowo dla pliku napisanego w &amp;lt;tt&amp;gt;C&amp;lt;/tt&amp;gt; zostaną wykonane następujące programy: preprocesor &amp;lt;tt&amp;gt;cpp&amp;lt;/tt&amp;gt;, kompilator &amp;lt;tt&amp;gt;cc1&amp;lt;/tt&amp;gt;, asembler &amp;lt;tt&amp;gt;as&amp;lt;/tt&amp;gt; oraz konsolidator &amp;lt;tt&amp;gt;collect2&amp;lt;/tt&amp;gt; (dostępny zazwyczaj jako program &amp;lt;tt&amp;gt;ld&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Przydatne opcje:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	&amp;lt;tt&amp;gt;-c&amp;lt;/tt&amp;gt;, bez linkowania.&lt;br /&gt;
&lt;br /&gt;
Otrzymujemy pliki obiektowe &amp;lt;tt&amp;gt;*.o&amp;lt;/tt&amp;gt;, używamy zwykle gdy nasz program składa się z kilku plików z funkcjami i nagłówkami tychże funkcji (własne biblioteki).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	&amp;lt;tt&amp;gt;-o&amp;lt;/tt&amp;gt; (output), podanie nazwy pliku wynikowego:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;g++ -o hello hello.cc&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	&amp;lt;tt&amp;gt;-Wall&amp;lt;/tt&amp;gt;&lt;br /&gt;
wypisz wszystkie ostrzeżenia (Warnings all)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	&amp;lt;tt&amp;gt;-O&amp;lt;/tt&amp;gt; optymalizacja (&amp;lt;tt&amp;gt;-O&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;-O0&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;-O1&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;-O2&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;-O3&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;-Os&amp;lt;/tt&amp;gt;)(kolejne stopnie optymalizacji)&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	&amp;lt;tt&amp;gt;-g&amp;lt;/tt&amp;gt;&lt;br /&gt;
tworzy informację potrzebną do debuggowania w naturalnym dla danego&lt;br /&gt;
systemu formacie. Debuggujemy zwykle za pomocą &amp;lt;tt&amp;gt;gdb&amp;lt;/tt&amp;gt;. Opcji &amp;lt;tt&amp;gt;-g&amp;lt;/tt&amp;gt; można&lt;br /&gt;
używać z opcją &amp;lt;tt&amp;gt;-O&amp;lt;/tt&amp;gt;. gdb można uruchomić w emacsie (dlatego go tak lubimy).&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
===Zadanie===&lt;br /&gt;
Napisz dwa programy &amp;amp;mdash; &amp;lt;tt&amp;gt;hello.c&amp;lt;/tt&amp;gt; i &amp;lt;tt&amp;gt;hello.cc&amp;lt;/tt&amp;gt; wypisujące &amp;quot;Hello world!&amp;quot; w terminalu. Skompiluj je i wywołaj. Dodaj do nich komentarze.&lt;/div&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
</feed>