Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dlaczego kompilator nie wywala redeklaracji

Ostatnio zmodyfikowano 2012-09-01 22:09
Autor Wiadomość
McAffey
Temat założony przez niniejszego użytkownika
Dlaczego kompilator nie wywala redeklaracji
» 2012-09-01 21:58:51
Witam. Ostatnio mnie zaintrygowała jedna rzecz. Może zamiast tłumaczyć od razu pokażę na przykładzie (używam kompilatora GNU GCC, na żadnym innym nie próbowałem).

Dlaczego w kodzie :

C/C++
int zmienna_globalna;

void funkcja( int zmienna_globalna )
{
    return;
}

int main()
{
    funkcja( zmienna_globalna );
   
    return 0;
}

kompilator nie wywala redeklaracji zmiennej zmienna_globalna ? Wydawało mi się, że tak się będzie działo, ponieważ ta zmienna globalna jest dostępna wewnątrz funkcji, a tutaj się kompiluje nawet bez ostrzeżeń. Ktoś z was się kiedyś nad tym zastanawiał ? Może to po prostu niedociągnięcie ze strony twórców kompilatora albo kwestia ustawień kompilacji. To w sumie nieistotna błahostka, ale że mnie intryguje to stwierdziłem że tu napiszę :)
P-64244
jankowalski25
» 2012-09-01 22:05:49
Chodzi o to, że gdy w funkcji na liście argumentów użyjesz nazwy zmiennej globalnej, to ją "zasłaniasz" i kompilator przyjmuje najbliższą nazwę (czyli jako argument funkcji).
Przykład:
C/C++
#include <iostream>

int zmienna_globalna;

void funkcja( int zmienna_globalna )
{
    zmienna_globalna = 1; //zmienna z listy argumentów funkcji
    zmienna_globalna =::zmienna_globalna; //operator zasięgu pozwala na użycie zmiennej globalnej
    std::cout << zmienna_globalna << "\n";
    return;
}

int main()
{
    funkcja( zmienna_globalna );
    std::cout << zmienna_globalna << "\n";
    return 0;
}
P-64246
McAffey
Temat założony przez niniejszego użytkownika
» 2012-09-01 22:09:20
Dzięki wielkie za wyjaśnienie, na takie właśnie liczyłem :)
P-64247
« 1 »
  Strona 1 z 1