Darmowe Forum
Kwiecień 27, 2024, 19:58:34 *
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności: Forum zostało uruchomione!
 
   Strona główna   Pomoc Zaloguj się Rejestracja  
Strony: [1]
  Drukuj  
Autor Wątek: Instrukcje preprocesora  (Przeczytany 3858 razy)
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« : Styczeń 04, 2012, 09:28:45 »

Preprocesor to program przetwarzający kod źródłowy jeszcze przed rozpoczęciem kompilacji.
Instrukcje preprocesora nazywane są dyrektywami. Wszystkie dyrektywy preprocesora rozpoczynają się od znaku #. Znak # sygnalizuje, że nastąpi po nim dyrektywa preprocesora. Dyrektywy wstawiamy na samym początku kodu programu.
Przykładem dyrektywy jest #include , pozwalająca na dołączenie do kodu źródłowego kodu z innych plików źródłowych.


Inna dyrektywą jest dyrektywa #define, określająca stałe wartości dostępne w programie: #define adam 4321
od tej chwili identyfikator adam oznacza stałą o wartości 4321. Takie postępowanie ma niewątpliwe zalety, kolejne wersje programu przy zmianie stałej adam wymagają tylko zmiany wartości przy dyrektywie include.
Dyrektywa #define nakazuje preprocesorowi zastąpić każde wystąpienie ciągu znaków innym ciągiem znaków. Pierwszy , zastępowany ciąg znaków (adam) spełnia rolę makronazwy, drugi jest makrorozwinięciem (macro body).

Zadanie 1. Przykład deklaracji makroinstrukcji adam i suma.

#include <cstdlib>
#include <iostream>
#define adam 4321;
#define suma (23+2)
using namespace std;

int main(int argc, char *argv[])
{ cout<<suma;
cout<<adam;
    system("PAUSE");
    return EXIT_SUCCESS;
}


Makro instrukcja rozwijana przez preprocesor może działać podobnie do funkcji - pobierać argumenty i zwracać wartość uzyskaną w wyniku przetwarzania danych . Uwaga, ważną rolę spełniają nawiasy okrągłe !!!!!
« Ostatnia zmiana: Styczeń 04, 2012, 09:33:30 wysłane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #1 : Styczeń 04, 2012, 09:35:24 »

Zadanie 2. Napisać dwie dyrektywy preprocesora obliczające czwartą potęgę wprowadzonej liczby. Wyjaśnić dlaczego wystąpiły różnice w otrzymanym wyniku.


#include <cstdlib>
#include <iostream>
#define pot1(a) ((a)*(a)*(a)*(a))
#define pot2(a) a*a*a*a
using namespace std;

int main(int argc, char *argv[])
{ int b=2, c,d;
cout<<"Wynik wywołania dwóch makr:";
c=pot1(b);d=pot2(b);
cout<<"rezultat pot1(b): "<<c<<endl;
cout<<"rezultat pot2(b): "<<d<<endl;
c=pot1(b+1); d=pot2(b+1);
cout<<"rezultat pot1(b+1): "<<c<<endl;
cout<<"rezultat pot2(b+1): "<<d<<endl;

    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #2 : Styczeń 04, 2012, 10:10:59 »

Zadanie 3. Makroinstrukcje w języku C++ wolne są od ograniczeń topologicznych nałożonych na funkcje. Przykład poniżej ma wykazać poprawność tej tezy. Jeżeli zmieniony zostanie typ danych z int na float, to działanie i konstrukcja makroinstrukcji pozostaną bez zmian.

#include <cstdlib>
#include <iostream>
#define pot1(a) ((a)*(a)*(a)*(a))
#define pot2(a) a*a*a*a
using namespace std;

int main(int argc, char *argv[])
{ float b=4.5, c,d;
cout<<"Wynik wywołania dwóch makr:";
c=pot1(b);d=pot2(b);
cout<<"rezultat pot1(b): "<<c<<endl;
cout<<"rezultat pot2(b): "<<d<<endl;
c=pot1(b+1); d=pot2(b+1);
cout<<"rezultat pot1(b+1): "<<c<<endl;
cout<<"rezultat pot2(b+1): "<<d<<endl;

    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomości: 821


Email
« Odpowiedz #3 : Styczeń 04, 2012, 10:12:34 »

Zadanie 4. Napisać dwie instrukcje preprocesora wybierającą mniejszą i większą wartość z dwóch wprowadzonych liczb.
 
#include <cstdlib>
#include <iostream>
#define maks(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)>(b)?(b):(a))

using namespace std;

int main(int argc, char *argv[])
{ float b=4.5, c,d;
cout<<"Podaj pierwszą liczbę liczbę:"; cin>>c;
cout<<"Podaj drugą liczbę liczbę:"; cin>>d;
cout<<"Wieksza liczba to :"<<maks(c,d);

    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
Strony: [1]
  Drukuj  
 
Skocz do:  

Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC | Sitemap

Polityka cookies
Darmowe Fora | Darmowe Forum

tdw zaburzenia basicrpg magiaslonca osw