pamiętnik programisty

05 sie, 2010

Z C++ zagadka nr 5

Zamieszczony przez: pejotr w: C++|Programowanie

Wrednie podchwytliwe zadanie czasami w tej czy innej postaci spotykane na różnych testach ze znajomości języka.
Jaki będzie efekt wykonania poniższego programu:

#include <iostream>

int foo(int x, int y)
{
    return x + y;
}

int main()
{
    int z, k;
    z = 10;
    k = foo(z = 20, z += 1);
    std::cout << k << std::endl;
}

Najłatwiej zweryfikować korzystając z kompilatora. Na rozważanie przyczyna takie czy innego wyniku nie warto poświęcać zbyt wiele czasu, ponieważ dodanie flagi -Wall rozwiewa wszystkie wątpliwości:

zadanie.cpp: In function ‘int main()’:
zadanie.cpp:14: warning: operation on ‘z’ may be undefined

Zatem poprawna odpowiedź na pytanie: „to zależy od kompilatora, sprzętu, systemu”

Tagi:

2 odpowiedzi na "Z C++ zagadka nr 5"

1 | Lukasz

14. Sierpień 2010 o 19:00

Avatar

Myśl ogólna odnośnie do testów tego typu – niby sprawdza znajomość gramatyki języka, która dopuszcza instrukcję przypisania prawie w każdym miejscu, ale powiedzmy sobie szczerze – jest to próba wymyślenia czegoś „fajnego” na siłę.

2 | Darek

21. Maj 2011 o 07:04

Avatar

Kod jest w wersji okrojonej, żeby tylko ogarnąć algorytm. Jak ktoś chce to skompilować to (jednym ze sposobów) jest dodanie dodatkowej biblioteki linijką: #include oraz na końcu polecenia, które „zatrzyma” okno na widoku – getch();

Mi wyszło 31, co wydaje mi się logiczne.

Formularz komentarza

*

O mnie:

pejotrWitam, nazywam się Piotr Doniec, w internecie występuję pod nickami 'pejotr' oraz 'doniczek'. Obecnie jestem studentem 3 roku informatyki na Politechnice Warszawskiej na wydziale Elektroniki i Technik Informacyjnych.

Kategorie