Stanford Compilers Flashcards
Co oznacza poniższa deklaracja w C++?
extern int foo();
Do funkcji foo nie można przekazać parametrów
Co oznacza poniższa deklaracja w C?
extern int foo();
Do funkcji foo można przekazać dowolną liczbę parametrów z dowolnymi typami.
Jakiej kontrukcji użyć aby można było używać funkcji napisanych w C z kodu C++?
Po słowie kluczowym extern wpisać “C”, jak poniżej:
extern “C” int foo(int a, char* b);
Co się stanie jeżeli nazwę funkcji zdefiniowanej gdzie indziej słowem kluczowym extern bez dodatkowej klauzuli “C” ?
Kompilator nazwię funkcję po swojemu i nie będzie to pierwotnie zapisana nazwa funkcji.
Jakie nowe słowa kluczowe występują w C++?
new, delete, const, class
Jaka koncepcja programowania obiektowego gwarantuje pewność przepływu informacji w programie?
information hiding (ukrywanie informacji)
Wymień powód dla którego warto używać klas?
Łatwiej jest zorganizować program, jeżeli dane oraz funkcje na nich operujące są w jednym miejscu.
Jak nazywa się wskaźnik do obiektu, który zawiera definicję funkcji składowej z której nastąpiło wywołanie?
this
Czy wewnątrz funkcji składowej wywołanie innej funkcji składowej poprzez this-> jest domniemane?
Tak, jest domniemane.
Co możemy zyskać używajac funkcji dostępowych do pól klas i uczynić te pola klas prywatnymi?
Dodatkową modularność, jako, że możemy zredefiniować sposób w jaki przechowywane są dane bez zmiany dostępu do nich.
Czy konstruktor można umieścić w dowolnej sekcji (public, private, protected)?
Tak, w dowolnej.
Czy konstruktor zwraca wartość?
Nie zwraca
Czy poniższa deklracja z inicjalizacją jest poprawna?
Stack stack2 = new Stack(17);
Nie jest poprawna, operator new zwraca wskaźnik na obiekt
define dlugosc_pola 12
Jaką konstrukcją można zastąpić poniższą dyrektywę preprocesora
const int dlugosc_pola = 8;
Czy w definicji klasy w sekcji składowych funkcji można inlineować funkcje?
Można, chociaż nie jest to zalecane, należy rozdzielić nagłówek od implementacji.
Co można stwierdzić patrząc na poniższy listing (znaczenie ma wytłuszczony druk)
class {
…
bool Full() const;
…
};
Funkcja składowa Full nigdy nie modyfikuje danych składowych klasy
Co się stanie przy próbie dealokacji pamięci automatycznej słowem kluczowym delete?
Wiadomość z biblioteki glibc - Invalid pointer, ze stack trace
[gdb] Jaką komendą ustawić szerokość linii?
**set **width 70
[gdb] Jaką komendą ustawić przerwanie na nazwię funkcji?
break **nazwa funkcji
[gdb] Jaka komenda spowoduje wykonanie aktualnej instrukcji i przeniesie do następnej instrukcji w ramach wykonywanej funkcji?
n(ext)
[gdb] Jakiej komendy należy użyć aby przenieść się do następnej linii kodu w dowolnej funkcji?
s(tep)
Jaka komenda wypiszę wartość zmiennej?
p(rint)
[gdb] Jaka komenda wypisze kontekst aktualnie przetwarzanej linii kodu?
l(ist)
Jaka komenda pozwoli debuggerowi wykonać dalszą część programu?
c(ontinue)
[gdb] W jaki sposób prawidłowo przekazać dodatkowe argumenty podczas wywolania programu z terminala?
gdb **–args **./lexer test.cl
Mając series poleceń jak poniżej
1069 register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
(gdb) n
1070 if ( yy_accept[yy_current_state] )
(gdb) n
1072 (yy_last_accepting_state) = yy_current_state;
(gdb) n
1073 (yy_last_accepting_cpos) = yy_cp;
(gdb) n
1075 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
jak można ułatwić sobie życie w tej sytuacji (jeżeli szukam kontekstu gdzie mogę się zatrzymać)?
Po wprowadzeniu komendy i jej zatwierdzeniu, można użyć <return> aby niejawnie wprowdzać ostatnią komendę.</return>
[gdb] Jaką komendą uruchomić/wznowić program?
r(un)
Czy podczas wznowienia programu dodatkowe argumenty przekazane z terminala potrzeba wprowadzać ponownie?
Nie ma takiej potrzeby.
Jaką komendą opuścić debugger?
q(uit)
[gdb] W jaki sposób przekazać argumenty z sesji gdb?
set args arg1 arg2 … argN
[gdb] Jaka komenda ustawi przerwanie na konkretnej linii?
break line
[gdb] Jaką komendą uzyskać informacje o założonych przerwaniach?
info break
[gdb] Jaką komendą można usunąć przerwanie nr 1?
break 1
[gdb] Zdefiniuj warunkowe przerwanie programu dla dowolnego warunku.
b *nazwa funkcji *if warunek na wykonanie
[gdb] W jaki sposób ustawić przerwanie na danym pliku źródłowym w konkretnej linii?
break *nazwa pliku *: numer linii
[gdb] W jaki sposób ustawić przerwanie na nazwie funkcji znając jej dopasowanie po wyrażeniu regularnym?
rbreak wyrażenie regularne
[gdb] W jaki sposób pozbyć się wszystkich przerwań?
Komendą delete bez parametrów
[shell] Jaki przełącznik grep pozwala ujrzeć numer linii gdzie zwrócono dopasowanie?
-n
[shell] Jaki przełącznik grep pozwala wprowadzić regularne wyrażenie zaraz po nim?
-e wyrażenie regularne
[gdb] W jaki sposób wywołać komendę terminalową z gdb?
shell
[gdb] Jaka komenda spowoduje obserwowcje zmienną globalną (przy zapisie)?
watch **zmienna globalna
[gdb] Jakie informacje zostaną wyświetlone gdy zadziała watch?
Stara wartość, nowa wartość oraz linia na której program się zatrzymał.
[gdb] Czy komenda info break podaje statystyki wywołań danego przerwania?
Tak.
[gdb] Jaką komendą można wyświetlić argumenty programu?
info args
[gdb] Jaka komenda wyświetli wartości zmiennych lokalnych dla aktualnej ramki?
info locals
[gdb] W jaki sposób wyświetlać wartość zmiennej przy każdym przerwaniu?
display **nazwa zmiennej
[gdb] Jaka komenda wyświetli zawartość rejestrów ogólnego przeznaczenia dla aktualnego wątka?
info registers
[gdb] Jaka komenda wyświetli zawartość wszystkich rejestrow dla aktualnego wątka?
info all-registers