
//
// To jest przykładowy kod z podrozdziału 8.2 "Deklaracje i definicje" książki 
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

#include "std_lib_facilities.h"     // W tym pliku znajduje się deklaracja strumienia cout.

//------------------------------------------------------------------------------

int f(int);              // Deklaracja f.

int main()
{
    int i = 7;           // Deklaracja i.
    cout << f(i) << '\n';
}

//------------------------------------------------------------------------------

double my_sqrt(double);  // Brak treści funkcji.
extern int a;            // Brak wartości inicjującej oznacza brak definicji.

int a;                   // Definicja
//int a;                 // Błąd: podwójna definicja.

int x = 7;               // Definicja
extern int x;            // Deklaracja
extern int x;            // Inna deklaracja

double my_sqrt(double);  // Deklaracja
double my_sqrt(double d) { return 0.0; }    // Definicja
//double my_sqrt(double d) { return 1.0; }    // Błąd: podwójna definicja.
double my_sqrt(double);  // Inna deklaracja my_sqrt
double my_sqrt(double);  // Kolejna deklaracja my_sqrt.

//int my_sqrt(double);   // Błąd: niespójne deklaracje funkcji sqrt.

double expression();     // Tylko deklaracja, nie definicja.

double primary()
{
    // ...
    return expression();
    // ...
}

//------------------------------------------------------------------------------

double term()
{
    // ...
    return primary();
    // ...
}

//------------------------------------------------------------------------------

double expression()
{
    // ...
    return term();
    // ...
}

//------------------------------------------------------------------------------

int f(int n) { return n; }
