Witam!
Mam kilka pytań dot. dyrektyw preprocesora, bo właśnie skończyłem ten dział w Symfonii C++. Szukałem odpowiedzi na te pytanie w Google, ale po prostu nic nie znalazłem. Może to dlatego, że są zbyt szczegółowe - nie wiem. Przepraszam, za to, że tak się o coś pytam ostatnio często, ale po prostu chciałbym to zrozumieć, a czasem też autor nie opisał czegoś dokładniej.
Pytanie 1.
W nazwach predefiniowanych jest nazwa __NAME__ - jest pod nią zapamiętana nazwa aktualnie kompilowanego pliku (tak mniej więcej jest napisane w książce). Jednak we wszystkich kodach jest zamiast niej użyta nazwa __FILE__. Kiedy zamienię ją na wcześniejszą, czyli na __NAME__ , program się po prostu nie skompiluje… Czy ktoś mógłby opisać tę sprawę dokładniej :?:
1.1
W C++ jest zdefiniowana domyślnie nazwa __cplusplus - czyli kompilator kompiluje w C++. Jest też __STDC__ - jeżeli np. zastosujemy coś takiego:
#if 10 == 10
__STDC__
// instrukcje...
#endif
To w ramach tego bloku, wszystkie instrukcje jakie napotka kompilator będą interpretowane jako instrukcje w C :?: 1.2 W ćwiczeniach pod koniec działu w.w. książce jest takie polecenie aby w programie została wyświetlona instrukcja czy użyto kompilatora C++. Można to zrealizować na kilka sposobów wg mnie, ale już przy jednym dziej się coś dziwnego:
#ifndef __STDC__
cout << "W tym programie uzyto kompilatora C++";
#endif
Ta instrukcja się nie wyświetli… Czyli wychodzi na to, że taka nazwa też jest domyślnie zdefiniowana :o (Jeżeli dam:
#ifdef __cplusplus
cout << "W tym programie uzyto kompilatora C++";
#endif
to oczywiście, się to wyświetli). Pytanie 2. Jest tzw. dyrektywa #pragma. Opisana jest dokładniej tutaj na str. 10: http://www.ita.wat.edu.pl/~lgrad/pi/wyklad_c5.pdfZałóżmy, że mamy Borland C++ i wpiszemy coś takiego:
#pragma exit
To czy ktoś mógłby podać przykład momentu w programu, w którym opłaca się zastosowanie takiej dyrektywy :?: Bez przykładu trudno mi sobie to wyobrazić… Pytanie 3.
O jaki sposób “upewnienia się ile wynosi DLUGOSC_BUF” chodziło autorowi. Bo np. na pewno nie o ten:
cout << DLUGOSC_BUF;
Tu bez problemu, możemy dowiedzieć się ile “jakaś rzecz” wynosi…