[C++] Preprocesor

owen1011
Użytkownik
Użytkownik
Posty: 568
Rejestracja: 29 sty 2009, o 13:59
Płeć: Mężczyzna
Podziękował: 230 razy

[C++] Preprocesor

Post autor: owen1011 »

1. Napisz makrodefinicje o nazwie MISJA, ktora przyslany do niej argument (np. "12" zamieni na jeden wyraz np. Apollo_12 (oczywiscie jesli argumentem bedzie 9 to w rezultacie otrzymamy Apollo_9)

2. Napisz makrodefinicje o jednym parametrze formalnym, ktora bedzie wypisywala na ekranie:
- numer linii programu, w ktorej ja wywolano,
- wyrazenie, ktore bylo jej argumentem (ma byc ujete w cudzyslow);
- wartosc tego wyrazenia.
To znaczy: jesli w programie sa dwa wywolania tej makrodefinicji (w linii 120 i 150), to na ekranie pojawic powinien sie np. taki tekst:

W linii 120, wartosc wyrazenia "obiekt"=12
W linii 150, wartosc wyrazenia "obiekt"=10

3 Program ma miec kilka wariantow. W tym celu poslugujemy sie kompilacja warunkowa. Są juz nastepujace dyrektywy preprocesora
#define GRUDZIEN_2007 1
#define SIERPIEN_2005 2

Potem jest dyrektywa, w ktorej nastepuje wybor wersji. Ponizej widzisz, ze wybrano tu akurat wersje "grudniową"

#define WERSJA_EKSPERYMENTU GRUDZIEN_2007

Potrzebujemy teraz dyrektywy #define TYP_SPREZARKI ...
Powyzej, w miejscu wielokropka, nazwa ta, w zaleznosci od wybranego typu eksperymentu, ma miec wartosci
- dla eksperymentu grudniowego: 3000
- dla eksperymentu sierpniowego 2050
Jesli zas WERSJA_EKSPERYMENTU zostala okreslona inaczej lub nie zostala okreslona wcale, ma nastapic przerwanie kompilacji i wydrukowany komunika "Nieokreslony zostal typ eksperymentu";


4. Pierwszy program z tej ksiazki uzupelnij tak, by oprocz tekstu "witamy na pokladzie" pojawila sie na ekranie informacja o tym:
- jak nazywa sie plik programu
- w ktorej linii nastapila instrukcja wypisujaca
-jaka byla data kompilacji
- jaka byla godzina, minuta itd. tej kompilacji;
- czy uzyto kompilatora C++



moje pomysly:
program 1 (nie kompiluje sie poprawnie:6 D:\C++ symfonia moje projekty\!!!!!54 zaadanie 13 stroona 189\main.cpp:12 [Warning] character constant too long for its type )

Kod: Zaznacz cały

KOD
#include <cstdlib>
#include <iostream>



#define MISJA(Apollo_,d) Apollo_##d



int d;

char 'Apollo_';

using namespace std;

int main(int argc, char *argv[])
{
  
    cout<<"podaj numer: \n";
    cin>>d;
    
    cout<<MISJA(Apollo_,d)<<endl;
    
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

zadanie 4:

Kod: Zaznacz cały

KOD
#include <cstdlib>
#include <iostream>

using namespace std;



int main(int argc, char *argv[])
{
    cout<<"Witamy \nna pokladzie :)";
    
    cout<<__NAME__<<__LINE__<<__TIME__;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
- nie kompiluje sie to i ponadto nie wiem jakie jest "polecenie" na rodzaj kompilatora...
taki blad jest wyrzucany: 12 D:\C++ symfonia moje projekty\57 zaadanie 23 stronna 191\main.cpp `__NAME__' undeclared (first use this function)

z gory dzieki za pomoc
spajder
Użytkownik
Użytkownik
Posty: 735
Rejestracja: 7 lis 2005, o 23:56
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 2 razy
Pomógł: 133 razy

[C++] Preprocesor

Post autor: spajder »

W pierwszym:

Kod: Zaznacz cały

char 'Apollo_';
co ta linia miałaby robić?

zauważ, co się dzieje:
cout<<MISJA(Apollo_,d)<<endl;
zamieni na:

Kod: Zaznacz cały

cout<<Apollo_d<<endl;
a takiej zmiennej nie ma.

Preprocesor działa jeszcze przed kompilatorem, nie ma pojęcia nawet, że pracuje na kodzie c++.
ODPOWIEDZ