Etapy kompilacji. Wykład 7. Przetwarzanie wstępne, str. 1. #define ILE for(i=0; i<ile; i++)...

Podobne dokumenty
Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Co nie powinno być umieszczane w plikach nagłówkowych:

Abstrakcyjne struktury danych w praktyce

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Podział programu na moduły

W większości języków programowania(nie we wszystkich) wymaga się, żeby użyte w programie zmienne były wcześniej zadeklarowane:

Deklaracje. W większości języków programowania(nie we wszystkich) wymaga się, żeby użyte w programie zmienne były wcześniej zadeklarowane:

Preprocesor. natychmiast następuje \n są usuwane następny wiersz zostaje połączony z tym, w którym był znak \ o usuwane są wszystkie komentarze są

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Laboratorium 3: Preprocesor i funkcje ze zmienną liczbą argumentów. mgr inż. Arkadiusz Chrobot

Język C - podstawowe informacje

zastępować zarezerwowane słowa lub symbole innymi,

Poprzedni wykład [ ] :

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Podstawy programowania. Wykład 9 Preprocesor i modularna struktura programów. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania C. dr. Krystyna Łapin

#line #endif #ifndef #pragma

Języki programowania obiektowego Nieobiektowe elementy języka C++

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Funkcja (podprogram) void

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

1 Podstawy c++ w pigułce.

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Wstęp do Programowania, laboratorium 02

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

WYKŁAD 1 - KONSPEKT. Program wykładu:

Programowanie Proceduralne

Zmienne, stałe i operatory

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy programowania skrót z wykładów:

1 Podstawy c++ w pigułce.

Część 4 życie programu

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

PMiK Programowanie Mikrokontrolera 8051

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Wstęp do programowania

Podstawy Programowania.

Wstęp do programowania

Błędy leksykalne są na ogół nietrudne do znalezienia.

I - Microsoft Visual Studio C++

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

C++. Leksykon kieszonkowy

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Tablice, funkcje - wprowadzenie

Programowanie strukturalne i obiektowe

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Przekazywanie argumentów wskaźniki

Język C zajęcia nr 11. Funkcje

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Functionalization. Jeszcze o funkcjach i strukturze projektu. Marcin Makowski. 3 grudnia Zak lad Chemii Teoretycznej UJ

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Wykład 1

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Wzorce funkcji (szablony)

Podstawy programowania komputerów

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

Podstawy Programowania

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

Rodzaje błędów w programach. Wykład9.UWAGIOGÓLNE,str.1

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

PROGRAMOWANIE w C prolog

Wstęp do programowania

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Język ludzki kod maszynowy

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

2 Przygotował: mgr inż. Maciej Lasota

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Inżynieria Wytwarzania Systemów Wbudowanych

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Szablony klas, zastosowanie szablonów w programach

Programowanie - wykład 4

Pytania sprawdzające wiedzę z programowania C++

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

IX. Wskaźniki.(3 godz.)

C-struktury wykład. Dorota Pylak

Podstawy programowania

Transkrypt:

Etapy kompilacji Wykład 7 Przetwarzanie wstępne, str 1 #define ILE 100 for(i=0; i<ile; i++)

Etapy kompilacji Wykład 7 Przetwarzanie wstępne, str 1 #define ILE 100 for(i=0; i<ile; i++) #include #define #if

Etapy kompilacji Wykład 7 Przetwarzanie wstępne, str 1 #define ILE 100 for(i=0; i<ile; i++) przetwarzanie wstępne #include #define #if for(i=0; i<100; i++)

Etapy kompilacji Wykład 7 Przetwarzanie wstępne, str 1 #define ILE 100 for(i=0; i<ile; i++) przetwarzanie wstępne #include #define #if for(i=0; i<100; i++) kompilacja właściwa binaria

Etapy kompilacji Wykład 7 Przetwarzanie wstępne, str 1 #define ILE 100 for(i=0; i<ile; i++) przetwarzanie wstępne #include #define #if for(i=0; i<100; i++) kompilacja właściwa dane binaria wyniki

Etapy kompilacji Wykład 7 Przetwarzanie wstępne, str 1 #define ILE 100 for(i=0; i<ile; i++) przetwarzanie wstępne #include #define #if for(i=0; i<100; i++) kompilacja właściwa dane Przetwarzanie wstępne preprocessing binaria wyniki

Wykład 7 Przetwarzanie wstępne, str 2 Przed właściwą kompilacją tekst programu jest przekształcany zgodnie z dyrektywami programisty

Wykład 7 Przetwarzanie wstępne, str 2 Przed właściwą kompilacją tekst programu jest przekształcany zgodnie z dyrektywami programisty To przekształcenie jest czysto tekstowe preprocesor nie zajmuje się logiką programu Nieostrożnie napisane dyrektywy mogą spowodować, że program nie da się skompilować, albo będzie działał błędnie

Wykład 7 Przetwarzanie wstępne, str 2 Przed właściwą kompilacją tekst programu jest przekształcany zgodnie z dyrektywami programisty To przekształcenie jest czysto tekstowe preprocesor nie zajmuje się logiką programu Nieostrożnie napisane dyrektywy mogą spowodować, że program nie da się skompilować, albo będzie działał błędnie

Wykład 7 Przetwarzanie wstępne, str 2 Przed właściwą kompilacją tekst programu jest przekształcany zgodnie z dyrektywami programisty To przekształcenie jest czysto tekstowe preprocesor nie zajmuje się logiką programu Nieostrożnie napisane dyrektywy mogą spowodować, że program nie da się skompilować, albo będzie działał błędnie Podstawowe dyrektywy: #include włączyć plik

Wykład 7 Przetwarzanie wstępne, str 2 Przed właściwą kompilacją tekst programu jest przekształcany zgodnie z dyrektywami programisty To przekształcenie jest czysto tekstowe preprocesor nie zajmuje się logiką programu Nieostrożnie napisane dyrektywy mogą spowodować, że program nie da się skompilować, albo będzie działał błędnie Podstawowe dyrektywy: #include włączyć plik #define zastąpić w tekście programu

Wykład 7 Przetwarzanie wstępne, str 2 Przed właściwą kompilacją tekst programu jest przekształcany zgodnie z dyrektywami programisty To przekształcenie jest czysto tekstowe preprocesor nie zajmuje się logiką programu Nieostrożnie napisane dyrektywy mogą spowodować, że program nie da się skompilować, albo będzie działał błędnie Podstawowe dyrektywy: #include włączyć plik #define zastąpić w tekście programu #if kompilować warunkowo

Wykład 7 Przetwarzanie wstępne, str 3 #include program na wielu plikach

Wykład 7 Przetwarzanie wstępne, str 3 #include program na wielu plikach #include"plik" plik Włącza(bez interpretowania) cały plik

Wykład 7 Przetwarzanie wstępne, str 3 #include program na wielu plikach #include"plik" plik Włącza(bez interpretowania) cały plik Dyrektywa#include"plik" włącza plik z aktualnego katalogu opracowany przez programistę

Wykład 7 Przetwarzanie wstępne, str 3 #include program na wielu plikach #include"plik" plik Włącza(bez interpretowania) cały plik Dyrektywa#include"plik" włącza plik z aktualnego katalogu opracowany przez programistę Dyrektywa#include<plik> włącza plik z katalogu kompilatora opracowany przez autora kompilatora

Wykład 7 Przetwarzanie wstępne, str 4 #include program na wielu plikach #include"globalne" intmain(){ printf("\n%s\n\n",haslo); return 0; }

Wykład 7 Przetwarzanie wstępne, str 4 #include program na wielu plikach #include"globalne" intmain(){ printf("\n%s\n\n",haslo); return 0; } Błędy: niezadeklarowane printf haslo

Wykład 7 Przetwarzanie wstępne, str 4 #include program na wielu plikach #include"globalne" intmain(){ printf("\n%s\n\n",haslo); return 0; } globalne #include<stdioh> char haslo[20] ="Naprzod!";

Wykład 7 Przetwarzanie wstępne, str 4 #include program na wielu plikach #include"globalne" intmain(){ printf("\n%s\n\n",haslo); return 0; } Drukuje: Naprzod! globalne #include<stdioh> char haslo[20] ="Naprzod!";

Wykład 7 Przetwarzanie wstępne, str 4 #include program na wielu plikach #include"globalne" intmain(){ printf("\n%s\n\n",haslo); return 0; } Drukuje: Naprzod! globalne #include<stdioh> char haslo[20] ="Naprzod!"; Plik inkludowany może inkludować inne pliki

Wykład 7 Przetwarzanie wstępne, str 5 #include program na wielu plikach Co inkludujemy, pisząc na początku programu #include<stdioh> lub #include<mathh> itp?

Wykład 7 Przetwarzanie wstępne, str 5 #include program na wielu plikach Co inkludujemy, pisząc na początku programu #include<stdioh> lub #include<mathh> itp? (Na sigmie te pliki mieszczą w/usr/include/ można zajrzeć)

Wykład 7 Przetwarzanie wstępne, str 5 #include program na wielu plikach Co inkludujemy, pisząc na początku programu #include<stdioh> lub #include<mathh> itp? (Na sigmie te pliki mieszczą w/usr/include/ można zajrzeć) W standardowym pliku nagłówkowym(header file) mieszczą się min definicjetypów npfile

Wykład 7 Przetwarzanie wstępne, str 5 #include program na wielu plikach Co inkludujemy, pisząc na początku programu #include<stdioh> lub #include<mathh> itp? (Na sigmie te pliki mieszczą w/usr/include/ można zajrzeć) W standardowym pliku nagłówkowym(header file) mieszczą się min definicjetypów npfile definicjestałych npeof

Wykład 7 Przetwarzanie wstępne, str 5 #include program na wielu plikach Co inkludujemy, pisząc na początku programu #include<stdioh> lub #include<mathh> itp? (Na sigmie te pliki mieszczą w/usr/include/ można zajrzeć) W standardowym pliku nagłówkowym(header file) mieszczą się min definicjetypów npfile definicjestałych npeof deklaracje zmiennych np stdout(zmienna typu FILE*, wskaźnik na plik związany z ekranem)

Wykład 7 Przetwarzanie wstępne, str 5 #include program na wielu plikach Co inkludujemy, pisząc na początku programu #include<stdioh> lub #include<mathh> itp? (Na sigmie te pliki mieszczą w/usr/include/ można zajrzeć) W standardowym pliku nagłówkowym(header file) mieszczą się min definicjetypów npfile definicjestałych npeof deklaracje zmiennych np stdout(zmienna typu FILE*, wskaźnik na plik związany z ekranem) nagłówki funkcji np printf; wyłącznie nagłówki, bez definicji!

Wykład 7 Przetwarzanie wstępne, str 5 #include program na wielu plikach Co inkludujemy, pisząc na początku programu #include<stdioh> lub #include<mathh> itp? (Na sigmie te pliki mieszczą w/usr/include/ można zajrzeć) W standardowym pliku nagłówkowym(header file) mieszczą się min definicjetypów npfile definicjestałych npeof deklaracje zmiennych np stdout(zmienna typu FILE*, wskaźnik na plik związany z ekranem) nagłówki funkcji np printf; wyłącznie nagłówki, bez definicji!

Wykład 7 Przetwarzanie wstępne, str 5 #include program na wielu plikach Co inkludujemy, pisząc na początku programu #include<stdioh> lub #include<mathh> itp? (Na sigmie te pliki mieszczą w/usr/include/ można zajrzeć) W standardowym pliku nagłówkowym(header file) mieszczą się min definicjetypów npfile definicjestałych npeof deklaracje zmiennych np stdout(zmienna typu FILE*, wskaźnik na plik związany z ekranem) nagłówki funkcji np printf; wyłącznie nagłówki, bez definicji! Np intprintf(char*format,);

Wykład 7 Przetwarzanie wstępne, str 5 #include program na wielu plikach Co inkludujemy, pisząc na początku programu #include<stdioh> lub #include<mathh> itp? (Na sigmie te pliki mieszczą w/usr/include/ można zajrzeć) W standardowym pliku nagłówkowym(header file) mieszczą się min definicjetypów npfile definicjestałych npeof deklaracje zmiennych np stdout(zmienna typu FILE*, wskaźnik na plik związany z ekranem) nagłówki funkcji np printf; wyłącznie nagłówki, bez definicji! Np intprintf(char*format,); Definicje funkcji standardowych mieszczą się w bibliotece standardowej C, a nie w pliku nagłówkowym

Wykład 7 Przetwarzanie wstępne, str 6 #include własny plik nagłówkowy

Wykład 7 Przetwarzanie wstępne, str 6 #include własny plik nagłówkowy Modularność programu ułatwia panowanie nad dużymi systemami W najprostszym przypadku:

Wykład 7 Przetwarzanie wstępne, str 6 #include własny plik nagłówkowy Modularność programu ułatwia panowanie nad dużymi systemami W najprostszym przypadku: funkcje ogólne na jednym pliku; np 1ulamki-definicjec

Wykład 7 Przetwarzanie wstępne, str 6 #include własny plik nagłówkowy Modularność programu ułatwia panowanie nad dużymi systemami W najprostszym przypadku: funkcje ogólne na jednym pliku; np 1ulamki-definicjec używający ich program główny na innym; np 1ulamki-glownyc

Wykład 7 Przetwarzanie wstępne, str 6 #include własny plik nagłówkowy Modularność programu ułatwia panowanie nad dużymi systemami W najprostszym przypadku: funkcje ogólne na jednym pliku; np 1ulamki-definicjec używający ich program główny na innym; np 1ulamki-glownyc wspólna kompilacja: gcc-wall 1ulamki-definicjec 1ulamki-glownyc

Wykład 7 Przetwarzanie wstępne, str 6 #include własny plik nagłówkowy Modularność programu ułatwia panowanie nad dużymi systemami W najprostszym przypadku: funkcje ogólne na jednym pliku; np 1ulamki-definicjec używający ich program główny na innym; np 1ulamki-glownyc wspólna kompilacja: gcc-wall 1ulamki-definicjec 1ulamki-glownyc (patrz 07-Ulamki/)

Wykład 7 Przetwarzanie wstępne, str 6 #include własny plik nagłówkowy Modularność programu ułatwia panowanie nad dużymi systemami W najprostszym przypadku: funkcje ogólne na jednym pliku; np 1ulamki-definicjec używający ich program główny na innym; np 1ulamki-glownyc wspólna kompilacja: gcc-wall 1ulamki-definicjec 1ulamki-glownyc (patrz 07-Ulamki/) gcc-wall część wspólna definicje część wspólna główny

Wykład 7 Przetwarzanie wstępne, str 7 #include własny plik nagłówkowy część wspólna gcc-wall #include"" definicje h #include"" główny

Wykład 7 Przetwarzanie wstępne, str 7 #include własny plik nagłówkowy część wspólna gcc-wall #include"" definicje h #include"" główny typy, stałe, zmienne i nagłówki funkcji; np 2ulamkih; funkcje ogólne; np 2ulamki-definicjec; używający ich program główny; np 2ulamki-glownyc; wspólna kompilacja } biblioteka

Wykład 7 Przetwarzanie wstępne, str 7 #include własny plik nagłówkowy część wspólna gcc-wall #include"" definicje h #include"" główny typy, stałe, zmienne i nagłówki funkcji; np 2ulamkih; funkcje ogólne; np 2ulamki-definicjec; używający ich program główny; np 2ulamki-glownyc; wspólna kompilacja } biblioteka

Wykład 7 Przetwarzanie wstępne, str 7 #include własny plik nagłówkowy część wspólna gcc-wall #include"" definicje h #include"" główny typy, stałe, zmienne i nagłówki funkcji; np 2ulamkih; funkcje ogólne; np 2ulamki-definicjec; używający ich program główny; np 2ulamki-glownyc; wspólna kompilacja } biblioteka

Wykład 7 Przetwarzanie wstępne, str 7 #include własny plik nagłówkowy część wspólna gcc-wall #include"" definicje h #include"" główny typy, stałe, zmienne i nagłówki funkcji; np 2ulamkih; funkcje ogólne; np 2ulamki-definicjec; używający ich program główny; np 2ulamki-glownyc; wspólna kompilacja } biblioteka

Wykład 7 Przetwarzanie wstępne, str 7 #include własny plik nagłówkowy część wspólna gcc-wall #include"" definicje h #include"" główny typy, stałe, zmienne i nagłówki funkcji; np 2ulamkih; funkcje ogólne; np 2ulamki-definicjec; używający ich program główny; np 2ulamki-glownyc; wspólna kompilacja } biblioteka

Wykład 7 Przetwarzanie wstępne, str 8 #include własny plik nagłówkowy Utrzymywanie tej samej części wspólnej w kilku różnych plikach jest niepraktyczne Dokonywanie w niej zmian wymaga zmieniania kilku plików

Wykład 7 Przetwarzanie wstępne, str 8 #include własny plik nagłówkowy Utrzymywanie tej samej części wspólnej w kilku różnych plikach jest niepraktyczne Dokonywanie w niej zmian wymaga zmieniania kilku plików

Wykład 7 Przetwarzanie wstępne, str 8 #include własny plik nagłówkowy Utrzymywanie tej samej części wspólnej w kilku różnych plikach jest niepraktyczne Dokonywanie w niej zmian wymaga zmieniania kilku plików Staramysię,żebytensamkodpisanybyłtylkoraz;albowplikuz definicjami, albo w programie głównym

Wykład 7 Przetwarzanie wstępne, str 8 #include własny plik nagłówkowy Utrzymywanie tej samej części wspólnej w kilku różnych plikach jest niepraktyczne Dokonywanie w niej zmian wymaga zmieniania kilku plików Minimum tego, co musi być znane zarówno definicjom jak programowi głównemu(definicje typów, stałych, deklaracje zmiennych, nagłówki funkcji) wynosimy do odrębnego pliku nagłówkowego

Wykład 7 Przetwarzanie wstępne, str 8 #include własny plik nagłówkowy Utrzymywanie tej samej części wspólnej w kilku różnych plikach jest niepraktyczne Dokonywanie w niej zmian wymaga zmieniania kilku plików Staramysię,żebytensamkodpisanybyłtylkoraz;albowplikuz definicjami, albo w programie głównym Minimum tego, co musi być znane zarówno definicjom jak programowi głównemu(definicje typów, stałych, deklaracje zmiennych, nagłówki funkcji) wynosimy do odrębnego pliku nagłówkowego Nazwy plików nagłówkowych tradycyjnie mają rozszerzenie h od ang header

Wykład 7 Przetwarzanie wstępne, str 8 #include własny plik nagłówkowy Utrzymywanie tej samej części wspólnej w kilku różnych plikach jest niepraktyczne Dokonywanie w niej zmian wymaga zmieniania kilku plików Staramysię,żebytensamkodpisanybyłtylkoraz;albowplikuz definicjami, albo w programie głównym Minimum tego, co musi być znane zarówno definicjom jak programowi głównemu(definicje typów, stałych, deklaracje zmiennych, nagłówki funkcji) wynosimy do odrębnego pliku nagłówkowego Nazwy plików nagłówkowych tradycyjnie mają rozszerzenie h od ang header Autor programu głównego nie musi znać treści pliku z definicjami, ale powinien znać treść pliku nagłówkowego

Wykład 7 Przetwarzanie wstępne, str 9 #define zastępowanie w programie

Wykład 7 Przetwarzanie wstępne, str 9 #define zastępowanie w programie #define ABC defg ABC ABC

Wykład 7 Przetwarzanie wstępne, str 9 #define zastępowanie w programie #define ABC defg ABC ABC defg defg

Wykład 7 Przetwarzanie wstępne, str 9 #define zastępowanie w programie #define ABC defg ABC ABC defg defg Dyrektywa #define MAKRO reszta wiersza powoduje zastąpienie wszystkich wystąpień MAKRa w programie przez resztę wiersza

Wykład 7 Przetwarzanie wstępne, str 10 #define zastępowanie w programie Przykład: (UWAŻAĆ!) M #define ILE 100; if(ile < 1000) printf("\n mniejsze\n\n"); else printf("\n niemniejsze\n\n");

Wykład 7 Przetwarzanie wstępne, str 10 #define zastępowanie w programie Przykład: (UWAŻAĆ!) M #define ILE 100; if(ile < 1000) printf("\n mniejsze\n\n"); else printf("\n niemniejsze\n\n"); sygnalizuje błąd: error: expected ) before ; token

Wykład 7 Przetwarzanie wstępne, str 10 #define zastępowanie w programie Przykład: (UWAŻAĆ!) M #define ILE 100; if(ile < 1000) printf("\n mniejsze\n\n"); else printf("\n niemniejsze\n\n"); sygnalizuje błąd: error: expected ) before ; token Wynik zastąpienia: if(100; < 1000) printf("\n mniejsze\n\n"); else printf("\n niemniejsze\n\n");

Wykład 7 Przetwarzanie wstępne, str 10 #define zastępowanie w programie Przykład: (UWAŻAĆ!) M #define ILE 100; if(ile < 1000) printf("\n mniejsze\n\n"); else printf("\n niemniejsze\n\n"); sygnalizuje błąd: error: expected ) before ; token Wynik zastąpienia: if(100; < 1000) printf("\n mniejsze\n\n"); else printf("\n niemniejsze\n\n"); Winny jest średnik

Wykład 7 Przetwarzanie wstępne, str 11 #define zastępowanie w programie Nie zastępuje się części słów

Wykład 7 Przetwarzanie wstępne, str 11 #define zastępowanie w programie Nie zastępuje się części słów; np nie będzie żadnego zastąpienia w tym przypadku: #define KOT pies BOJKOT

Wykład 7 Przetwarzanie wstępne, str 11 #define zastępowanie w programie Nie zastępuje się części słów; np nie będzie żadnego zastąpienia w tym przypadku: #define KOT pies BOJKOT Nie zastępuje się we wnętrzu cudzysłowu

Wykład 7 Przetwarzanie wstępne, str 11 #define zastępowanie w programie Nie zastępuje się części słów; np nie będzie żadnego zastąpienia w tym przypadku: #define KOT pies BOJKOT Nie zastępuje się we wnętrzu cudzysłowu; np nie będzie żadnego zastąpienia w tym przypadku: #define KOT pies printf("wlazł KOT na płot\n");

Wykład 7 Przetwarzanie wstępne, str 12 #define zastępowanie z parametrami

Wykład 7 Przetwarzanie wstępne, str 12 #define zastępowanie z parametrami Makro może mieć parametry nazwy pooddzielane przecinkami

Wykład 7 Przetwarzanie wstępne, str 12 #define zastępowanie z parametrami Makro może mieć parametry nazwy pooddzielane przecinkami Przy zastępowaniu parametry są tekstowo (czyli na ślepo, bezmyślnie ) zastępowane argumentami wywołania

Wykład 7 Przetwarzanie wstępne, str 12 #define zastępowanie z parametrami Makro może mieć parametry nazwy pooddzielane przecinkami Przy zastępowaniu parametry są tekstowo (czyli na ślepo, bezmyślnie ) zastępowane argumentami wywołania #define KWADRAT(x) x*x printf("%i\n",kwadrat(4)); printf("%2lf\n",kwadrat(12));

Wykład 7 Przetwarzanie wstępne, str 12 #define zastępowanie z parametrami Makro może mieć parametry nazwy pooddzielane przecinkami Przy zastępowaniu parametry są tekstowo (czyli na ślepo, bezmyślnie ) zastępowane argumentami wywołania #define KWADRAT(x) x*x printf("%i\n",kwadrat(4)); printf("%2lf\n",kwadrat(12)); printf("%i\n",4*4); printf("%2lf\n",12*12);

Wykład 7 Przetwarzanie wstępne, str 12 #define zastępowanie z parametrami Makro może mieć parametry nazwy pooddzielane przecinkami Przy zastępowaniu parametry są tekstowo (czyli na ślepo, bezmyślnie ) zastępowane argumentami wywołania #define KWADRAT(x) x*x printf("%i\n",kwadrat(4)); printf("%2lf\n",kwadrat(12)); printf("%i\n",4*4); printf("%2lf\n",12*12); Aletrzebauważać

Wykład 7 Przetwarzanie wstępne, str 13 #define zastępowanie z parametrami #define KWADRAT(x) x*x printf("%i\n",kwadrat(2+2)); Taka komenda drukuje 8 (zamiast 16)

Wykład 7 Przetwarzanie wstępne, str 13 #define zastępowanie z parametrami #define KWADRAT(x) x*x printf("%i\n",kwadrat(2+2)); Taka komenda drukuje 8 (zamiast 16)

Wykład 7 Przetwarzanie wstępne, str 13 #define zastępowanie z parametrami #define KWADRAT(x) x*x printf("%i\n",kwadrat(2+2)); Taka komenda drukuje 8 (zamiast 16) Wynik zastąpienia: 2+2*2+2 Lepsza definicja: #define KWADRAT(x)(x)*(x) wynik zastąpienia: (2+2)*(2+2)

Wykład 7 Przetwarzanie wstępne, str 13 #define zastępowanie z parametrami #define KWADRAT(x) x*x printf("%i\n",kwadrat(2+2)); Taka komenda drukuje 8 (zamiast 16) Wynik zastąpienia: 2+2*2+2 Lepsza definicja: #define KWADRAT(x)(x)*(x) wynik zastąpienia: (2+2)*(2+2)

Wykład 7 Przetwarzanie wstępne, str 14 #define zastępowanie z parametrami #define DLA(I, N) for(i=0; I<(N); I++)

Wykład 7 Przetwarzanie wstępne, str 14 #define zastępowanie z parametrami #definedla(i,n)for(i=0;i<(n);i++) pętlapoiod0don

Wykład 7 Przetwarzanie wstępne, str 14 #define zastępowanie z parametrami #definedla(i,n)for(i=0;i<(n);i++) pętlapoiod0don Wtedy: w=1; DLA(i,N)w=2*w; obliczapotęgęw=2 N w=1; DLA(i,N)w=w*(i+1); obliczasilnięw=n! DLA(i,n) DLA(j,k) tab[i][j] = 0; zeruje tablicę tab[n][k]

Wykład 7 Przetwarzanie wstępne, str 14 #define zastępowanie z parametrami #definedla(i,n)for(i=0;i<(n);i++) pętlapoiod0don Wtedy: w=1; DLA(i,N)w=2*w; obliczapotęgęw=2 N w=1; DLA(i,N)w=w*(i+1); obliczasilnięw=n! DLA(i,n) DLA(j,k) tab[i][j] = 0; zeruje tablicę tab[n][k]

Wykład 7 Przetwarzanie wstępne, str 14 #define zastępowanie z parametrami #definedla(i,n)for(i=0;i<(n);i++) pętlapoiod0don Wtedy: w=1; DLA(i,N)w=2*w; obliczapotęgęw=2 N w=1; DLA(i,N)w=w*(i+1); obliczasilnięw=n! DLA(i,n) DLA(j,k) tab[i][j] = 0; zeruje tablicę tab[n][k]

Wykład 7 Przetwarzanie wstępne, str 15 #define zastępowanie z parametrami UWAGA NA SPACJE!

Wykład 7 Przetwarzanie wstępne, str 15 #define zastępowanie z parametrami UWAGA NA SPACJE! #define ZLE(int)06+(int) printf("%i\n",(int)(zle(06))); makro bez parametrów: printf("%i\n",(int)((int)06+(int)(06))); drukuje: 0 #define ZLE(int)06+(int) printf("%i\n",(int)(zle(06))); makro z parametrem: printf("%i\n",(int)(06+06)); drukuje: 1

Wykład 7 Przetwarzanie wstępne, str 15 #define zastępowanie z parametrami UWAGA NA SPACJE! #define ZLE(int)06+(int) printf("%i\n",(int)(zle(06))); makro bez parametrów: printf("%i\n",(int)((int)06+(int)(06))); drukuje: 0 #define ZLE(int)06+(int) printf("%i\n",(int)(zle(06))); makro z parametrem: printf("%i\n",(int)(06+06)); drukuje: 1

Wykład 7 Przetwarzanie wstępne, str 15 #define zastępowanie z parametrami UWAGA NA SPACJE! #define ZLE(int)06+(int) printf("%i\n",(int)(zle(06))); makro bez parametrów: printf("%i\n",(int)((int)06+(int)(06))); drukuje: 0 #define ZLE(int)06+(int) printf("%i\n",(int)(zle(06))); makro z parametrem: printf("%i\n",(int)(06+06)); drukuje: 1

Wykład 7 Przetwarzanie wstępne, str 15 #define zastępowanie z parametrami UWAGA NA SPACJE! #define ZLE(int)06+(int) printf("%i\n",(int)(zle(06))); makro bez parametrów: printf("%i\n",(int)((int)06+(int)(06))); drukuje: 0 #define ZLE(int)06+(int) printf("%i\n",(int)(zle(06))); makro z parametrem: printf("%i\n",(int)(06+06)); drukuje: 1

Wykład 7 Przetwarzanie wstępne, str 15 #define zastępowanie z parametrami UWAGA NA SPACJE! #define ZLE(int)06+(int) printf("%i\n",(int)(zle(06))); makro bez parametrów: printf("%i\n",(int)((int)06+(int)(06))); drukuje: 0 #define ZLE(int)06+(int) printf("%i\n",(int)(zle(06))); makro z parametrem: printf("%i\n",(int)(06+06)); drukuje: 1

Wykład 7 Przetwarzanie wstępne, str 15 #define zastępowanie z parametrami UWAGA NA SPACJE! #define ZLE(int)06+(int) printf("%i\n",(int)(zle(06))); makro bez parametrów: printf("%i\n",(int)((int)06+(int)(06))); drukuje: 0 #define ZLE(int)06+(int) printf("%i\n",(int)(zle(06))); makro z parametrem: printf("%i\n",(int)(06+06)); drukuje: 1

Wykład 7 Przetwarzanie wstępne, str 16 #define zastępowanie z parametrami Poprzedzenie parametru makra płotkiem# powoduje ujęcie argumentu w cudzysłów

Wykład 7 Przetwarzanie wstępne, str 16 #define zastępowanie z parametrami Poprzedzenie parametru makra płotkiem# powoduje ujęcie argumentu w cudzysłów: #define PYTAJ O(zmienna)\ {printf("%s==",#zmienna);scanf("%i",&zmienna); }

Wykład 7 Przetwarzanie wstępne, str 16 #define zastępowanie z parametrami Poprzedzenie parametru makra płotkiem# powoduje ujęcie argumentu w cudzysłów: #define PYTAJ O(zmienna)\ {printf("%s==",#zmienna);scanf("%i",&zmienna); } Wtedy PYTAJ O(N) rozwija się do {printf("%s==","n");scanf("%i",&n); }

Wykład 7 Przetwarzanie wstępne, str 16 #define zastępowanie z parametrami Poprzedzenie parametru makra płotkiem# powoduje ujęcie argumentu w cudzysłów: #define PYTAJ O(zmienna)\ {printf("%s==",#zmienna);scanf("%i",&zmienna); } Wtedy PYTAJ O(N) rozwija się do {printf("%s==","n");scanf("%i",&n); } idrukuje N== anastępniewczytujeliczbęcałkowitądozmiennej N

Wykład 7 Przetwarzanie wstępne, str 17 #define makra standardowe Komenda: printf(" Data:%s Czas:%s Plik:%s Wiersz:%i\n", DATE, TIME, FILE, LINE ); wydrukowała: Data: Mar 31 2013 Czas: 14:43:33 Plik: testc Wiersz: 5

Wykład 7 Przetwarzanie wstępne, str 17 #define makra standardowe Komenda: printf(" Data:%s Czas:%s Plik:%s Wiersz:%i\n", DATE, TIME, FILE, LINE ); wydrukowała: Data: Mar 31 2013 Czas: 14:43:33 Plik: testc Wiersz: 5 DATE data TIME czas(godz:min:sek) FILE przetwarzany plik LINE nrwiersza

Wykład 7 Przetwarzanie wstępne, str 17 #define makra standardowe Komenda: printf(" Data:%s Czas:%s Plik:%s Wiersz:%i\n", DATE, TIME, FILE, LINE ); wydrukowała: Data: Mar 31 2013 Czas: 14:43:33 Plik: testc Wiersz: 5 DATE data TIME czas(godz:min:sek) FILE przetwarzany plik LINE nrwiersza

Wykład 7 Przetwarzanie wstępne, str 17 #define makra standardowe Komenda: printf(" Data:%s Czas:%s Plik:%s Wiersz:%i\n", DATE, TIME, FILE, LINE ); wydrukowała: Data: Mar 31 2013 Czas: 14:43:33 Plik: testc Wiersz: 5 DATE data TIME czas(godz:min:sek) FILE przetwarzany plik LINE nrwiersza

Wykład 7 Przetwarzanie wstępne, str 17 #define makra standardowe Komenda: printf(" Data:%s Czas:%s Plik:%s Wiersz:%i\n", DATE, TIME, FILE, LINE ); wydrukowała: Data: Mar 31 2013 Czas: 14:43:33 Plik: testc Wiersz: 5 DATE data TIME czas(godz:min:sek) FILE przetwarzany plik LINE nrwiersza

Wykład 7 Przetwarzanie wstępne, str 18 #define zastosowaniemakr FILE i LINE #define BLAD WEWN\ printf("\nbladwewnetrzny");\ printf("\n Powiadom autora programu podajac:");\ printf("\n nazwepliku:%s", FILE );\ printf("\n numer wiersza:%i\n\n", LINE ); if()bladwewn

Wykład 7 Przetwarzanie wstępne, str 18 #define zastosowaniemakr FILE i LINE #define BLAD WEWN\ printf("\nbladwewnetrzny");\ printf("\n Powiadom autora programu podajac:");\ printf("\n nazwepliku:%s", FILE );\ printf("\n numer wiersza:%i\n\n", LINE ); if()bladwewn drukuje: BLAD WEWNETRZNY Powiadom autora programu podajac: nazwe pliku: testc numer wiersza: 10

Wykład 7 Przetwarzanie wstępne, str 19 #define zastępowanie z parametrami Napisy, ujęte w cudzysłowy i postawione obok siebie, zlewają się w jeden: char napis[30] ="Maly""dom"; = char napis[30] ="Maly dom";

Wykład 7 Przetwarzanie wstępne, str 19 #define zastępowanie z parametrami Napisy, ujęte w cudzysłowy i postawione obok siebie, zlewają się w jeden: char napis[30] ="Maly""dom"; = char napis[30] ="Maly dom"; #define OSTRZEGAJ JESLI(cos zle)\ if(cos zle)\ printf("ostrzezenie:"#coszle"wwierszu%i\n", LINE ); OSTRZEGAJ JESLI(a[i]==0)

Wykład 7 Przetwarzanie wstępne, str 19 #define zastępowanie z parametrami Napisy, ujęte w cudzysłowy i postawione obok siebie, zlewają się w jeden: char napis[30] ="Maly""dom"; = char napis[30] ="Maly dom"; #define OSTRZEGAJ JESLI(cos zle)\ if(cos zle)\ printf("ostrzezenie:"#coszle"wwierszu%i\n", LINE ); OSTRZEGAJ JESLI(a[i]==0) if(a[i]==0) printf("ostrzezenie:""a[i]==0"" w wierszu%i\n", 10);

Wykład 7 Przetwarzanie wstępne, str 19 #define zastępowanie z parametrami Napisy, ujęte w cudzysłowy i postawione obok siebie, zlewają się w jeden: char napis[30] ="Maly""dom"; = char napis[30] ="Maly dom"; #define OSTRZEGAJ JESLI(cos zle)\ if(cos zle)\ printf("ostrzezenie:"#coszle"wwierszu%i\n", LINE ); OSTRZEGAJ JESLI(a[i]==0) if(a[i]==0) printf("ostrzezenie:""a[i]==0"" w wierszu%i\n", 10); drukuje: OSTRZEZENIE: a[i]==0 w wierszu 10

Wykład 7 Przetwarzanie wstępne, str 20 Dziedziczenie wielostronne

Wykład 7 Przetwarzanie wstępne, str 20 Dziedziczenie wielostronne Wwyniku wielostronnego dziedziczenia przez #include dojść może do wielokrotnej definicji tego samego typu Błąd: conflicting types for punkt Jak tego uniknąć?

Wykład 7 Przetwarzanie wstępne, str 20 Dziedziczenie wielostronne Wwyniku wielostronnego dziedziczenia przez #include dojść może do wielokrotnej definicji tego samego typu Błąd: plik punkth: typedef struct { double x,y; } punkt; plik odcinekh: #include"punkth" typedef struct { punkt pocz,kon; }odcinek; plik trojkath: #include"punkth" typedef struct { punkt w1,w2,w3; }trojkat; conflicting types for punkt Jak tego uniknąć? plik geomc: #include"odcinekh" #include"trojkath" trojkattr={{0,0}, {1,0}, {0,1}};

Wykład 7 Przetwarzanie wstępne, str 20 Dziedziczenie wielostronne Wwyniku wielostronnego dziedziczenia przez #include dojść może do wielokrotnej definicji tego samego typu Błąd: plik punkth: typedef struct { double x,y; } punkt; plik odcinekh: #include"punkth" typedef struct { punkt pocz,kon; }odcinek; plik trojkath: #include"punkth" typedef struct { punkt w1,w2,w3; }trojkat; conflicting types for punkt Jak tego uniknąć? plik geomc: #include"odcinekh" #include"trojkath" trojkattr={{0,0}, {1,0}, {0,1}};

Wykład 7 Przetwarzanie wstępne, str 20 Dziedziczenie wielostronne Wwyniku wielostronnego dziedziczenia przez #include dojść może do wielokrotnej definicji tego samego typu Błąd: plik punkth: typedef struct { double x,y; } punkt; plik odcinekh: #include"punkth" typedef struct { punkt pocz,kon; }odcinek; plik trojkath: #include"punkth" typedef struct { punkt w1,w2,w3; }trojkat; conflicting types for punkt Jak tego uniknąć? plik geomc: #include"odcinekh" #include"trojkath" trojkattr={{0,0}, {1,0}, {0,1}};

Wykład 7 Przetwarzanie wstępne, str 20 Dziedziczenie wielostronne Wwyniku wielostronnego dziedziczenia przez #include dojść może do wielokrotnej definicji tego samego typu Błąd: plik punkth: typedef struct { double x,y; } punkt; plik odcinekh: #include"punkth" typedef struct { punkt pocz,kon; }odcinek; plik trojkath: #include"punkth" typedef struct { punkt w1,w2,w3; }trojkat; conflicting types for punkt Jak tego uniknąć? plik geomc: #include"odcinekh" #include"trojkath" trojkattr={{0,0}, {1,0}, {0,1}};

Wykład 7 Przetwarzanie wstępne, str 20 Dziedziczenie wielostronne Wwyniku wielostronnego dziedziczenia przez #include dojść może do wielokrotnej definicji tego samego typu Błąd: plik punkth: typedef struct { double x,y; } punkt; plik odcinekh: #include"punkth" typedef struct { punkt pocz,kon; }odcinek; plik trojkath: #include"punkth" typedef struct { punkt w1,w2,w3; }trojkat; conflicting types for punkt Jak tego uniknąć? plik geomc: #include"odcinekh" #include"trojkath" trojkattr={{0,0}, {1,0}, {0,1}};

Wykład 7 Przetwarzanie wstępne, str 21 Dziedziczenie wielostronne Wwyniku wielostronnego dziedziczenia przez #include dojść może do wielokrotnej definicji tego samego typu Błąd: conflicting types for punkt Jak tego uniknąć?

Wykład 7 Przetwarzanie wstępne, str 21 Dziedziczenie wielostronne Wwyniku wielostronnego dziedziczenia przez #include dojść może do wielokrotnej definicji tego samego typu Błąd: conflicting types for punkt Jak tego uniknąć? plik punkth: #ifndef PUNKT #define PUNKT typedef struct { double x,y; } punkt; #endif #define PUNKT definiuje makro specyficzne dla pliku punkth

Wykład 7 Przetwarzanie wstępne, str 21 Dziedziczenie wielostronne Wwyniku wielostronnego dziedziczenia przez #include dojść może do wielokrotnej definicji tego samego typu Błąd: conflicting types for punkt Jak tego uniknąć? plik punkth: #ifndef PUNKT #define PUNKT typedef struct { double x,y; } punkt; #endif #define PUNKT definiuje makro specyficzne dla pliku punkth

Wykład 7 Przetwarzanie wstępne, str 21 Dziedziczenie wielostronne Wwyniku wielostronnego dziedziczenia przez #include dojść może do wielokrotnej definicji tego samego typu Błąd: conflicting types for punkt Jak tego uniknąć? plik punkth: #ifndef PUNKT #define PUNKT typedef struct { double x,y; } punkt; #endif #define PUNKT definiuje makro specyficzne dla pliku punkth Część programu między #ifndef PUNKT a #endif jest wykonywana tylko wtedy, gdy makro PUNKT jest niezdefiniowane To się może zdarzyć tylko jeden raz

Wykład 7 Przetwarzanie wstępne, str 21 Dziedziczenie wielostronne Wwyniku wielostronnego dziedziczenia przez #include dojść może do wielokrotnej definicji tego samego typu Błąd: conflicting types for punkt Jak tego uniknąć? plik punkth: #ifndef PUNKT #define PUNKT typedef struct { double x,y; } punkt; #endif #define PUNKT definiuje makro specyficzne dla pliku punkth Część programu między #ifndef PUNKT a #endif jest wykonywana tylko wtedy, gdy makro PUNKT jest niezdefiniowane To się może zdarzyć tylko jeden raz

Wykład 7 Przetwarzanie wstępne, str 21 Dziedziczenie wielostronne Wwyniku wielostronnego dziedziczenia przez #include dojść może do wielokrotnej definicji tego samego typu Błąd: conflicting types for punkt Jak tego uniknąć? plik punkth: #ifndef PUNKT #define PUNKT typedef struct { double x,y; } punkt; #endif #define PUNKT definiuje makro specyficzne dla pliku punkth Część programu między #ifndef PUNKT a #endif jest wykonywana tylko wtedy, gdy makro PUNKT jest niezdefiniowane To się może zdarzyć tylko jeden raz Wobec tego typ punkt zostanie zdefiniowany tylko raz

Wykład 7 Przetwarzanie wstępne, str 22 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif

Wykład 7 Przetwarzanie wstępne, str 22 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif ( poprzednioomawianakonstrukcja#ifndef#endif też jest przykładem kompilacji warunkowej )

Wykład 7 Przetwarzanie wstępne, str 22 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif ( poprzednioomawianakonstrukcja#ifndef#endif też jest przykładem kompilacji warunkowej ) Te dyrektywy włączają do kompilacji fragmenty programu np w zależności od używanej maszyny lub systemu operacyjnego lub kompilatora

Wykład 7 Przetwarzanie wstępne, str 22 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif ( poprzednioomawianakonstrukcja#ifndef#endif też jest przykładem kompilacji warunkowej ) Te dyrektywy włączają do kompilacji fragmenty programu np w zależności od używanej maszyny lub systemu operacyjnego lub kompilatora, stadium uruchamiania programu wydruki testowe, ostatecznie usuwane

Wykład 7 Przetwarzanie wstępne, str 22 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif ( poprzednioomawianakonstrukcja#ifndef#endif też jest przykładem kompilacji warunkowej ) Te dyrektywy włączają do kompilacji fragmenty programu np w zależności od używanej maszyny lub systemu operacyjnego lub kompilatora, stadium uruchamiania programu wydruki testowe, ostatecznie usuwane, chwilowego wyboru wersji

Wykład 7 Przetwarzanie wstępne, str 22 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif ( poprzednioomawianakonstrukcja#ifndef#endif też jest przykładem kompilacji warunkowej ) Te dyrektywy włączają do kompilacji fragmenty programu np w zależności od używanej maszyny lub systemu operacyjnego lub kompilatora, stadium uruchamiania programu wydruki testowe, ostatecznie usuwane, chwilowego wyboru wersji, itp

Wykład 7 Przetwarzanie wstępne, str 23 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif #ifwarunek 0 program 0 #elifwarunek 1 program 1 #elifwarunek 2 program 2 #elifwarunek n program n #elseprogram n+1 #endif

Wykład 7 Przetwarzanie wstępne, str 23 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif #ifwarunek 0 program 0 #elifwarunek 1 program 1 #elifwarunek 2 program 2 #elifwarunek n program n #elseprogram n+1 #endif jeślispełnionyjestwarunek 0, tokompilowanyjesttylkoprogram 0 jeślispełnionyjestwarunek 1, tokompilowanyjesttylkoprogram 1 itd jeśli nie jest spełniony żaden z warunków, tokompilowanyjesttylkoprogram n+1

Wykład 7 Przetwarzanie wstępne, str 23 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif #ifwarunek 0 program 0 #elifwarunek 1 program 1 #elifwarunek 2 program 2 #elifwarunek n program n #elseprogram n+1 #endif jeślispełnionyjestwarunek 0, tokompilowanyjesttylkoprogram 0 jeślispełnionyjestwarunek 1, tokompilowanyjesttylkoprogram 1 itd jeśli nie jest spełniony żaden z warunków, tokompilowanyjesttylkoprogram n+1

Wykład 7 Przetwarzanie wstępne, str 23 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif #ifwarunek 0 program 0 #elifwarunek 1 program 1 #elifwarunek 2 program 2 #elifwarunek n program n #elseprogram n+1 #endif jeślispełnionyjestwarunek 0, tokompilowanyjesttylkoprogram 0 jeślispełnionyjestwarunek 1, tokompilowanyjesttylkoprogram 1 itd jeśli nie jest spełniony żaden z warunków, tokompilowanyjesttylkoprogram n+1

Wykład 7 Przetwarzanie wstępne, str 23 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif #ifwarunek 0 program 0 #elifwarunek 1 program 1 #elifwarunek 2 program 2 #elifwarunek n program n #elseprogram n+1 #endif jeślispełnionyjestwarunek 0, tokompilowanyjesttylkoprogram 0 jeślispełnionyjestwarunek 1, tokompilowanyjesttylkoprogram 1 itd jeśli nie jest spełniony żaden z warunków, tokompilowanyjesttylkoprogram n+1 Niekompilowanie niepotrzebnego kodu daje oszczędność pamięci

Wykład 7 Przetwarzanie wstępne, str 24 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif Przykład: M(Patrz 07-Sortowanie/)

Wykład 7 Przetwarzanie wstępne, str 24 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif Przykład: M(Patrz 07-Sortowanie/) W pliku sorth można wybrać jeden z algorytmów: #define BUBBLE //#define INSERTION //#definemerge

Wykład 7 Przetwarzanie wstępne, str 24 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif Przykład: M(Patrz 07-Sortowanie/) W pliku sorth można wybrać jeden z algorytmów: #define BUBBLE //#define INSERTION //#definemerge Wpliku sortc temuwyborowi odpowiada kompilacja warunkowa:

Wykład 7 Przetwarzanie wstępne, str 24 Kompilacja warunkowa dyrektywy#if,#else,#elif,#endif Przykład: M(Patrz 07-Sortowanie/) W pliku sorth można wybrać jeden z algorytmów: #define BUBBLE //#define INSERTION //#definemerge Wpliku sortc temuwyborowi odpowiada kompilacja warunkowa: #if defined BUBBLE void sort(double tab[wlk TABLICY]) { sortowaniebąbelkowe } #elif defined INSERTION void sort(double tab[wlk TABLICY]) { sortowanieprzezwstawianie } #elif defined MERGE void sort(double tab[wlk TABLICY]) { sortowanieprzezscalanie } #else #error"nieznany algorytm sortowania" #endif

Wykład 7 Przetwarzanie wstępne, str 25 Jak automatycznie uzyskać wynik preprocessingu?

Wykład 7 Przetwarzanie wstępne, str 25 Jak automatycznie uzyskać wynik preprocessingu? Komenda gcc-e-ccplikzdyrektywami dokonuje przetwarzania wstępnego i niczego więcej; i drukuje tekst z rozwiniętymi dyrektywami

Wykład 7 Przetwarzanie wstępne, str 25 Jak automatycznie uzyskać wynik preprocessingu? Komenda gcc-e-ccplikzdyrektywami dokonuje przetwarzania wstępnego i niczego więcej; i drukuje tekst z rozwiniętymi dyrektywami: #define mleka piwa #define tego ten #define szczescie zly los #define czeka wykiwa Kto wypije mleka, tego szczescie czeka Kto wypije mleka, tego szczescie czeka

Wykład 7 Przetwarzanie wstępne, str 25 Jak automatycznie uzyskać wynik preprocessingu? Komenda gcc-e-ccplikzdyrektywami dokonuje przetwarzania wstępnego i niczego więcej; i drukuje tekst z rozwiniętymi dyrektywami: #define mleka piwa #define tego ten #define szczescie zly los #define czeka wykiwa Kto wypije mleka, tego szczescie czeka Kto wypije piwa, ten zly los wykiwa