Język C++ Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.

Slides:



Advertisements
Podobne prezentacje
1 Dygresja: cztery płyty główne…. 2 Dygresja: osobliwości C /* cos o nieistniejacym typie Boolean */ /* oraz o operatorze przecinkowym */ #include int.
Advertisements

Ćwiczenie (1) Dostosuj poniższy program do wymogów programu zaliczeniowego #include typedef struct{ char imie[30]; char nazwisko[50]; int rokUrodzenia;
#include #include main () { cout
Programowanie obiektowe W2
Podstawy informatyki 2013/2014
Jerzy F. Kotowski1 Informatyka I Wykład 9 TABLICE PREPROCESOR OPERATORY c.d. (nie tylko binarne)
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki 2013/2014
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki 2012/2013
Zadanie Dev C++.
Przekazywanie argumentów
Programowanie strukturalne i obiektowe
Programowanie strukturalne i obiektowe
Instrukcja for. Instrukcja warunkowa mgr inż. Agata Pacek.
Podstawy informatyki 2013/2014
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Programowanie obiektowe 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Programowanie obiektowe 2013/2014
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++ Przeładowanie operatorów Robert Nowak.
Programowanie strukturalne i obiektowe C++ Powtórzenie wiadomości z C++ Robert Nowak.
Pliki tekstowe – odczyt i zapis Zajęcia 11. Zapis do pliku tekstowego Prosty program pokazujący sposób zapisu do pliku tekstowego: // writing on a text.
Podstawy informatyki Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki Zmienne, stałe Instrukcje sterujące Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu.
Pakiety numeryczne Wielomiany Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Podstawy informatyki Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki Funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
Pakiety numeryczne Skrypty, funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Podstawy informatyki Struktury Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty.
Podstawy informatyki Operatory rzutowania Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały.
Podstawy informatyki Mechanizm obsługi sytuacji wyjątkowych Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu.
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
„Jak pomóc uczniom się uczyć i czerpać z tego radość?” opracowała: Krystyna Turska.
OBOWIĄZKI INFORMACYJNE BENEFICJENTA Zintegrowane Inwestycje Terytorialne Aglomeracji Wałbrzyskiej.
Excel 2007 dla średniozaawansowanych zajęcia z dnia
Pakiety numeryczne Równania różniczkowe Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Pakiety numeryczne Optymalizacja Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Python. Języki Programistyczne Microcode Machine code Assembly Language (symboliczna reprezentacja machine code) Low-level Programming Language (FORTRAN,
Definiowanie i planowanie zadań typu P 1.  Planowanie zadań typu P  Zadania typu P to zadania unikalne służące zwykle dokonaniu jednorazowej, konkretnej.
Promieniowanie jonizujące. Co to jest promieniotwórczość?
Dziedziczenie, polimorfizm, Interfejsy
Patryk Jasik pok. 415 GB Języki programowania Patryk Jasik pok. 415 GB
Programowanie Obiektowe – Wykład 1
© Fundacja Dajemy Dzieciom Siłę 2016
Podstawowe polecenia systemu
Full Text Finder Przegląd Publication Finder
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Kurs języka C++ – wykład 6 ( )
Rekursje Tak jak w innych językach funkcje mogą odwoływać się same do siebie Możemy regulować głębokość przed stwierdzeniem błędu (MaxRecursion, $RecursionLimit,
Programowanie obiektowe
Obliczenia w Matlabie Wprowadzenie
Obliczenia inżynierskie w Matlabie
Kurs języka C++ – wykład 13 ( )
Obliczenia w Matlabie Operatory, instrukcje sterujące, operacje bitowe
Programowanie obiektowe
Instrukcje wyboru.
Podstawy informatyki Zygfryd Głowacz.
Proste obliczenia w arkuszu kalkulacyjnym
Implementacja rekurencji w języku Haskell
Znajdowanie liczb pierwszych w zbiorze
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
struktura #include <stdio.h> #include <stdlib.h>
Język C++ Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Zapis prezentacji:

Język C++ Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka

Preprocesor To ta część środowiska programistycznego, która jest uruchamiana bezpośrednio przed uruchomieniem właściwego kompilatora. Dokonuje pierwszego przeglądnięcia plików źródłowych. Rozpoznaje dyrektywy i interpretując je, dokonuje odpowiednich działań ingerując w kod.

Preprocesor Dyrektywy są umieszczane w stosownych miejscach programu w osobnej linii programu. Zaczynają się od znaku # (może on być poprzedzony białymi znakami), po którym następuje nazwa dyrektywy oraz ewentualnie argumenty: #nazwa_dyrektywy arg Nie kończą się średnikiem! Jeśli dyrektywa nie mieści się w jednej linii, oddzielamy linie znakiem \ (backslash).

nazwa nie może zawierać białych znaków. Dyrektywa define Postać: #define nazwa zastępczy_ciąg_znaków Dyrektywa ta powoduje, że w kompilowanym pliku każde wystąpienie słowa nazwa będzie zastąpione przez podany dalej zastępczy_ciąg_znaków. nazwa nie może zawierać białych znaków. Białe znaki mogą pojawić się w zastępczym ciągu znaków. Można opuścić zastępczy ciąg znaków: #define nazwa

Dyrektywa define #include<iostream> using namespace std; #define PI 3.1416 int main() { cout << PI*2*2 << endl; return 0; } const double PI=3.1416;

Dyrektywa define #include<iostream> using namespace std; #define PI 3.1416 void fun(); int main() { cout << PI*1*1 << endl; fun(); system("pause"); return 0; } void fun() cout << PI*2*2 << endl;

Dyrektywa define #include<iostream> using namespace std; void fun(); int main() { cout << PI*1*1 << endl; fun(); system("pause"); return 0; } #define PI 3.1416 void fun() cout << PI*2*2 << endl; BŁĄD – PI nie jest znane

Dyrektywa define #include<iostream> using namespace std; void fun(); int main() { #define PI 3.1416 cout << PI*1*1 << endl; fun(); system("pause"); return 0; } void fun() cout << PI*2*2 << endl;

Dyrektywa undef Postać: #undef nazwa Występuje zawsze w parze z dyrektywą #define nazwa Dyrektywa ta określa miejsce w pliku, od którego przestaje obowiązywać zdefiniowana wcześniej dyrektywa

Makrodefinicja #include<iostream> using namespace std; #define wieksza(a,b) (a > b ? a : b) int main() { int a=1,b=5; cout<<wieksza(a,b)<<endl; return 0; }

Funkcja inline #include<iostream> using namespace std; inline int wieksza(int a,int b) { return (a>b?a:b); } int main() int a=1,b=5; cout<<wieksza(a,b)<<endl; return 0;

Define vs inline #include<iostream> using namespace std; inline int wieksza(int a,int b){ return (a>b?a:b);} int main() { int a=1,b=5; cout<<wieksza(++a,++b)<<endl; cout<<a<<endl; cout<<b<<endl; return 0; } #include<iostream> using namespace std; #define wieksza(a,b) (a>b?a:b) int main() { int a=1,b=5; cout<<wieksza(++a,++b)<<endl; cout<<a<<endl; cout<<b<<endl; return 0; } 6 2 7 2

Define vs inline #include<iostream> using namespace std; #define kwadrat(a) a*a int main() { int a=2; cout<<kwadrat(a)<<endl; return 0; } #include<iostream> using namespace std; #define kwadrat(a) a*a int main() { int a=2,b=5; cout<<kwadrat(a+b)<<endl; return 0; } 17 4

Działa dla dowolnego typu Define vs inline #include<iostream> using namespace std; inline int wieksza(int a,int b) { return (a>b?a:b); } #include<iostream> using namespace std; #define wieksza(a,b) (a>b?a:b) Działa dla typu int Działa dla dowolnego typu Rozwiązanie: szablon funkcji

Operator ## #include<iostream> using namespace std; #define polacz(a,b) a ## b int main() { polacz(c,out) << "To sie pojawi na ekranie" << endl; system("pause"); return 0; }

Kompilacja warunkowa Czasem istnieje konieczność, aby pewne linie kody były kompilowane tylko wtedy, gdy będzie to konieczne, np.: Debugowanie programu – wyświetlanie dodatkowych informacji, Dołączanie pewnych fragmentów kodu zależy od środowisku pewnych nazw. Kompilacja danego oznaczonego fragmentu kodu wykona się lub nie w zależności od spełnienia pewnych warunków.

Kompilacja warunkowa #include<iostream> using namespace std; #define N 0 int main() { int a=1,b=5; #if N cout<<a<<endl; #endif cout<<b<<endl; return 0; } #denife N 1 5 1 5

Kompilacja warunkowa #include<iostream> using namespace std; #define N 2 int main() { #if N == 0 cout<<"N=0"<<endl; #elif N == 1 || N == 2 cout<<"N=1 lub N=2"<<endl; #else cout<<"N nieznane"<<endl; #endif system("pause"); return 0; }

Dyrektywa include Postać: #include <nazwa_pliku> #include "nazwa_pliku" W dane miejsce w kompilowanym pliku źródłowym (w którym występuje ta dyrektywa) wstawiana jest zawartość pliku o zadanej nazwie. Najczęściej używana dla wstawiania plików nagłówkowych (z definicjami typów, struktur danych, klas, itp.).

Plik a.h int a; Plik b.cpp #include"a.h" int b; Pliki nagłówkowe Plik a.h int a; Plik b.cpp #include"a.h" int b; Plik b.cpp int a; int b;

Plik a.h int a; Plik b.h #include"a.h" int b; Plik c.cpp #include"b.h" Pliki nagłówkowe Plik a.h int a; Plik b.h #include"a.h" int b; Plik c.cpp #include"b.h" Plik b.h int a; int b; Plik c.cpp int a; int b; BŁĄD redefinicja

ifdef ifndef #ifndef PLIK_H #define PLIK_H ... tersc pliku naglowkowego #endif

Nie definiujemy po raz drugi a Pliki nagłówkowe Plik a.h #ifndef A_H #define A_H int a; #endif Plik b.h #ifndef B_H #define B_H #include"a.h" int b; Plik c.cpp #include"b.h" Plik b.h #ifndef B_H #define B_H #ifndef A_H #define A_H int a; #endif int b; Plik c.cpp #ifndef A_H #define A_H int a; #endif #ifndef B_H #define B_H int b; Nie istnieje A_H Definiujemy A_H Definiujemy a Nie istnieje B_H Definiujemy B_H Istnieje A_H Nie definiujemy po raz drugi a Definiujemy b

Dyrektywa error #include<iostream> using namespace std; #define N 0 int main() { #if N == 0 #error N jest rowne 0 #endif system("pause"); return 0; }

Dyrektywa warning #include<iostream> using namespace std; #define N 0 int main() { #if N == 0 #warning N jest rowne 0 #endif system("pause"); return 0; }

Data i godzina kompilacji (nie aktualna) Nazwy predefiniowane #include<iostream> using namespace std; int main() { cout<<__FILE__<<endl; cout<<__LINE__<<endl; cout<<__DATE__<<endl; cout<<__TIME__<<endl; return 0; } Data i godzina kompilacji (nie aktualna)

Prezentacja udostępniona na licencji Creative Commons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie: http://creativecommons.org/licenses/by-sa/3.0/deed.pl